【问题标题】:Django Form not saving for Custom User ModelDjango 表单不为自定义用户模型保存
【发布时间】:2021-04-13 07:47:46
【问题描述】:

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

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

Views.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 

【问题讨论】:

标签: django django-models django-users django-registration


【解决方案1】:

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

 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))

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多