无法将关键字 '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 应用迁移。