Django 'User' 对象没有属性 'phone'



我想添加一个名为phone的自定义字段,但我得到了这个错误:

'User' object has no attribute 'phone'

我在models.py中所做的是:

class Customer(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
...
phone = models.CharField(max_length=17, null=True, unique=True)
...
def __str__(self):
return str(self.user)

我有forms.py

class CreatUserForm(UserCreationForm):
phone_regex = RegexValidator(regex=r'^+?1?d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
first_name = forms.CharField()
last_name = forms.CharField()
email = forms.EmailField()
phone = forms.CharField(validators=[phone_regex], max_length=17)
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'phone', 'password1', 'password2']

最后在CCD_ 4中,我具有以下功能:

@unauthenticated_user
def registerPage(request):
form = CreatUserForm()
if request.method == 'POST':
form = CreatUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
group = Group.objects.get(name='customers')
user.groups.add(group)
first_name = user.first_name
last_name =  user.last_name
email = user.email
phone = user.phone
Customer.objects.create(
user=user, first_name=first_name, last_name=last_name, email=email, phone=phone,
)

messages.success(request, username + ' created!')
return redirect('login')
context = {'form': form}
return render(request, 'main/page-register.html', context)

但是我无法从我的用户那里获得phone

这里最好使用两个形式,一个用于User,一个为Customer,然后"链接";视图级别的两个:

class CustomerForm(ModelForm):
phone_regex = RegexValidator(regex=r'^+?1?d{9,15}$', message='Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.')
phone = forms.CharField(validators=[phone_regex], max_length=17)
class Meta:
model = Customer
fields = ['phone']

然后我们可以将这两种形式与结合起来

@unauthenticated_user
def registerPage(request):
if request.method == 'POST':
form = UserCreationForm(request.POST, request.FILES)
form2 = CustomerForm(request.POST, request.FILES)
if form.is_valid() and form2.is_valid():
user = form.save()
form2.instance.user = user
form2.save()
group = Group.objects.get(name='customers')
user.groups.add(group)
messages.success(request, username + ' created!')
return redirect('login')
else:
form = UserCreationForm()
form2 = CustomerForm()
context = {'form': form, 'form2': forom2}
return render(request, 'main/page-register.html', context)

在模板中,然后呈现两种形式:

<form action="…" method="post">
{% csrf_token %}
{{ form1 }}
{{ form2 }}
Create customer
</form>

您的客户应该而不是具有与用户相同的字段:然后复制数据,很难保持数据同步。

最新更新