如何解决如何将PhoneNumberField数据保存到数据库?
我的forms.py文件
class CreateUserForm(UserCreationForm):
phone=PhoneNumberField()
class Meta:
model = User
fields = ['username','email','password1','password2','phone']
widgets={
'username':forms.TextInput(attrs={'placeholder':"Username"}),'email':forms.TextInput(attrs={'placeholder':"Email Address"}),'password1': forms.PasswordInput(attrs={'placeholder': 'Your Password'}),'password2': forms.PasswordInput(attrs={'placeholder': 'Confirm Password'}),'phone':PhoneNumberField(),}
我的models.py文件
class CustomerReg(models.Model):
user=models.OneToOneField(User,null=True,blank=True,on_delete=models.CASCADE)
name=models.CharField(max_length=200,null=True)
email=models.EmailField(max_length=254)
def create_profile(sender,**kwargs):
if kwargs['created']:
user_profile=CustomerReg.objects.create(user=kwargs['instance'])
post_save.connect(create_profile,sender=User)
我的views.py文件
def registerPage(request):
if request.user.is_authenticated:
return redirect('form')
else:
form=CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if(form.is_valid()):
form.save()
user=form.cleaned_data.get['username']
user=User.objects.get(username=user)
phone=form.cleaned_data.get['phone']
user.phone_number=phone
user.save()
return redirect('login')
context = {'form': form}
return render(request,'customer/register.html',context)
点击注册页面后会显示错误
AttributeError at /register/
'str' object has no attribute 'User'
所以我无法从表单中保存数据,因此必须创建新的“自定义用户模型”以在注册页面上保存用户的电话号码吗?
我的管理员。py
from django.contrib import admin
from .models import *
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .forms import UserChangeForm,UserCreationForm
# Register your models here.
admin.site.register(Customer)
class UserAdmin(BaseUserAdmin):
form = UserChangeForm
add_form = UserCreationForm
list_display = ('email','phone')
admin.site.register(User,UserAdmin)
解决方法
如果正确创建了模型,则您犯的错误是变量user
不是User
对象。该错误通知您user
变量表示一个字符串(来自表单的输入),该字符串不具有User
作为其属性。在这种情况下,您可能需要做类似
user = User.objects.get(username=user)
以便将User
对象分配给变量user
。
现在user
是一个User
对象,那么您可以做
user.phone_number = phone
user.save()
,
请尝试以下操作:
def registerPage(request):
if request.user.is_authenticated:
return redirect('form')
else:
form=CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
username=form.cleaned_data['username']
user=User.objects.get(username=username)
phone=form.cleaned_data['phone']
user.phone=phone
user.save()
return redirect('login')
context = {'form': form}
return render(request,'customer/register.html',context)
然后您显示管理员的电话字段
admin.py
from .forms import UserChangeForm,UserCreationForm
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
class UserAdmin(BaseUserAdmin):
form = UserChangeForm
add_form = UserCreationForm
list_display = ('email','phone') # You can add field to display field here..
list_filter = ('name')
fieldsets = (
(None,{'fields': ('email')}),('Personal info',{'fields': ('name','phone')}),('Permissions',)}),)
add_fieldsets = (
(None,{
'classes': ('wide',),'fields': ('name','user','email','phone')
}),)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal = ()
admin.site.register(User,UserAdmin)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。