无法将关键字 'phone' 解析为字段 django
Cannot resolve keyword 'phone' into field django
我在我的注册表中为 phone 号码添加了一个新的字段名称 phone,但是现在当我提交时它会抛出错误
Cannot resolve keyword 'phone' into field. Choices are: address,
date_joined, email, first_name, groups, id, is_active, is_staff,
is_superuser, last_login, last_name, logentry, notifications, order,
password, profile, user_permissions, username
这个错误我正在使用 Django 默认的用户创建表单
这是我的 forms.py
class SignUpForm(UserCreationForm):
phone_regex = RegexValidator(regex=r'^\+?1?\d{10}$', message="Inform a valid phone number.")
email = forms.EmailField(max_length=254, required=True, help_text='Required. Inform a valid email address.')
phone = forms.CharField(validators=[phone_regex], max_length=10, required=True, help_text='Required. Inform a valid phone number.')
class Meta:
model = User
fields = ('username', 'email', 'phone', 'password1', 'password2',)
def clean_email(self):
email = self.cleaned_data['email']
qs = User.objects.exclude(pk=self.instance.pk).filter(email__iexact=email)
if qs.exists():
raise ValidationError('A user with this email address already exists')
return email
def clean_phone(self):
phone = self.cleaned_data['phone']
qs = User.objects.exclude(pk=self.instance.pk).filter(phone__iexact=phone)
if qs.exists():
raise ValidationError('A user with same phone number already exists')
return phone
views.py
class SignUpView(View):
form_class = SignUpForm
template_name = 'register.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False # Deactivate account till it is confirmed
user.save()
current_site = get_current_site(request)
subject = 'Activate Your MySite Account'
message = render_to_string('account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)
messages.success(request, ('Please Confirm your email to complete registration.'))
return render( request, 'activation_sent_success.html')
return render(request, self.template_name, {'form': form})
任何建议帮助将不胜感激,谢谢
错误是由phone
字段引起的:
class Meta:
model = User
fields = ('username', 'email', 'phone', 'password1', 'password2',)
^^^^^^
在您的情况下,class Meta
中的 fields
用于指定您的 User
模型的哪些字段将出现在您的表单中。您可以使用它省略模型的某些字段。
您的 User
模型没有名为 phone
的字段。将此字段添加到您的模型将解决您的问题并且不要忘记执行 python manage.py makemigrations
.
如果您的模型有此字段,那么您可能会忘记使用 python manage.py makemigrations
应用迁移。
我在我的注册表中为 phone 号码添加了一个新的字段名称 phone,但是现在当我提交时它会抛出错误
Cannot resolve keyword 'phone' into field. Choices are: address, date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, notifications, order, password, profile, user_permissions, username
这个错误我正在使用 Django 默认的用户创建表单 这是我的 forms.py
class SignUpForm(UserCreationForm):
phone_regex = RegexValidator(regex=r'^\+?1?\d{10}$', message="Inform a valid phone number.")
email = forms.EmailField(max_length=254, required=True, help_text='Required. Inform a valid email address.')
phone = forms.CharField(validators=[phone_regex], max_length=10, required=True, help_text='Required. Inform a valid phone number.')
class Meta:
model = User
fields = ('username', 'email', 'phone', 'password1', 'password2',)
def clean_email(self):
email = self.cleaned_data['email']
qs = User.objects.exclude(pk=self.instance.pk).filter(email__iexact=email)
if qs.exists():
raise ValidationError('A user with this email address already exists')
return email
def clean_phone(self):
phone = self.cleaned_data['phone']
qs = User.objects.exclude(pk=self.instance.pk).filter(phone__iexact=phone)
if qs.exists():
raise ValidationError('A user with same phone number already exists')
return phone
views.py
class SignUpView(View):
form_class = SignUpForm
template_name = 'register.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False # Deactivate account till it is confirmed
user.save()
current_site = get_current_site(request)
subject = 'Activate Your MySite Account'
message = render_to_string('account_activation_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)
messages.success(request, ('Please Confirm your email to complete registration.'))
return render( request, 'activation_sent_success.html')
return render(request, self.template_name, {'form': form})
任何建议帮助将不胜感激,谢谢
错误是由phone
字段引起的:
class Meta:
model = User
fields = ('username', 'email', 'phone', 'password1', 'password2',)
^^^^^^
在您的情况下,class Meta
中的 fields
用于指定您的 User
模型的哪些字段将出现在您的表单中。您可以使用它省略模型的某些字段。
您的 User
模型没有名为 phone
的字段。将此字段添加到您的模型将解决您的问题并且不要忘记执行 python manage.py makemigrations
.
如果您的模型有此字段,那么您可能会忘记使用 python manage.py makemigrations
应用迁移。