列中的空值在保存 ModelForm 时违反了非空约束

null value in column violates not-null constraint while saving ModelForm

我有一个模型,它扩展了 django 的 User 模型,如下所示:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, verbose_name="user details")
    rewardpoints = models.IntegerField("rewardpoints") 

    def __str__(self):  
          return "%s's profile" % self.user.username  

我的forms.py

class UserProfileForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ['rewardpoints']

class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ['username', 'password']

我的view.py

class UserProfileFormView(View):
    def post(self, request, *args, **kwargs):
        userform = UserForm(request.POST, prefix='users')
        userprofileform = UserProfileForm(request.POST, prefix='userprofiles')
        if userform.is_valid() and userprofileform.is_valid():
            new_user = userform.save() #### Error over here.
            new_userprofile = userprofileform.save(commit=False)
            new_userprofile.user = new_user
            new_userprofile.save()
            return HttpResponseRedirect(reverse('users:welcome'))
        else:
            userform = UserForm(prefix='users')
            userprofileform = UserProfileForm(prefix='userprofiles')
            return render(request, 'users/signup.html', {'user_form': userform, 'userprofile_form': userprofileform})
    def get(self, request, *args, **kwargs):
        userform = UserForm(prefix='users')
        userprofileform = UserProfileForm(prefix='userprofiles')    
        return render(request, 'users/signup.html', {'user_form': userform, 'userprofile_form': userprofileform})

我的signup.html

<p> Hello Signup!! </p>
<form action="{% url 'users:signup' %}" method="post">
{% csrf_token %}
{{ user_form.username.label_tag }}
{{ user_form.username }}
{{ user_form.password.label_tag }}
{{ user_form.password }}
{{ userprofile_form }}
<input type="submit" value="Submit" />
</form>
</html>

但是在发出post请求时,出现了这个错误:null value in column "rewardpoints" violates not-null constraint

请告诉我解决这个问题的方法。

错误是因为你的字段rewardpoints需要一些值,它不能为空,所以,或者通过你的表单将一个值传递给rewardpoint,或者你可以为它设置一个默认值(推荐) .然后,当您创建用户配置文件时,表单会将 0 设置为初始值。

class UserProfile(models.Model): 
    user = models.OneToOneField(User, verbose_name="user details")
    rewardpoints = models.IntegerField(default=0)