Django 表单没有为自定义用户模型保存

问题描述

我有一个注册用户表单,它按预期进行所有验证。然而,这不是节省。我无法弄清楚原因。我如何调试它?有什么帮助吗?我是表单和表单视图的新手,任何带有示例的好文档都会真正帮助我。

class RegisterForm(forms.ModelForm):
    phone_number = forms.IntegerField(required=True)
    password1 = forms.CharField(widget=forms.PasswordInput())
    password2 = forms.CharField(widget=forms.PasswordInput())
    country_code = forms.IntegerField()
    #schools = school.objects.all()
    #school_name  = forms.ModelChoiceField(queryset=school.objects.distinct())
    MIN_LENGTH = 4
    
    class Meta:
        model = User
        fields = ['username','country_code','phone_number','password1','password2','full_name' ]

    
    def clean_phone_number(self):
        phone_number = self.data.get('phone_number')
        print(phone_number)
        if User.objects.filter(phone_number=phone_number).exists():
            raise forms.ValidationError(
                _("Another user with this phone number already exists"))
        if len(phone_number) == 10 and phone_number.isdigit():
            pass
        else:
            raise forms.ValidationError(
                _("Invalid Phone Number"))
        return phone_number
    
    def save(self,*args,**kwargs):
        print("saving")
        user = super(RegisterForm,self).save(*args,**kwargs)
        user.set_password(self.cleaned_data['password1'])
        print('Saving user with country_code',user.country_code)
        user.save()
        return user

视图.py

class RegisterView(SuccessMessageMixin,FormView):
    template_name = 'register-2.html'
    
    form_class = RegisterForm
    success_message = "One-Time password sent to your registered mobile number.\
                        The verification code is valid for 10 minutes."
    
    def form_valid(self,form):
        full_name=self.request.POST["full_name"]
                              
        user = form.save()
        print(user.id)
                    
        username = self.request.POST['username']
        password = self.request.POST['password1']
        user = authenticate(username=username,password=password)
        
        kwargs = {'user': user}
        self.request.method = 'POST'
        print("User created")
        


   The print in clean_phone_number works however,save does not work 

解决方法

我的表单有问题。该字段之一被禁用,因此未捕获该值。 但是要确定我使用了

 def form_invalid(self,form):
            # Add action to invalid form phase
            messages.error(self.request,form.errors)
            return self.render_to_response(self.get_context_data(form=form))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...