我想制作一个系统表格列的数据是必需的

时间:2017-12-25 04:19:24

标签: python django

用户名&电子邮件和性别以及年与月和日可以在我的app中注册。我在views.py中写道

def regist_save(request):

    regist_form = RegisterForm(request.POST or None)
    profile_form = ProfileForm(request.POST or None)
    context = {
        'regist_form': regist_form,
        'profile_form': profile_form,
    }

    if request.method == "POST" and regist_form.is_valid() and profile_form.is_valid():
        try:
                username = regist_form.cleaned_data.get('username', None)
                email = regist_form.cleaned_data.get('email', None)

                user = User.objects.get(Q(username=username) | Q(email=email))

                messages.warning(request, 'That detailed use is already available.')

                return render(request, 'registration/regist.html', context)
        except User.DoesNotExist:
                regist = regist_form.save(commit=False)
                regist.is_staff = True
                regist.save()

                profile = profile_form.save(commit=False)
                profile.user = regist
                sex = request.POST.get("sex", "")

                profile.sex = sex
                profile.save()

                return render(request, 'registration/detail.html')
    else:
        print(regist_form.errors)
        print(profile_form.errors)
        return render(request, 'registration/regist.html', context)

在forms.py

class ProfileForm(forms.ModelForm):
    class Meta:
        model = NewUser
        fields = (
           "sex"
        )

在models.py

class NewUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    sex = models.CharField(max_length=100,null=True, blank=True, default=None)

当我选择性别时,请输入用户名&发送电子邮件并将REGIST按钮放入浏览器,这些数据被注册。但是,现在如果我不选择性别,数据会被注册。我想制作一个系统强制性别数据,但当前的系统是不同的。我的代码有什么问题?为什么views.py中的profile_form.is_valid()有效?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

中指定blank=True
sex = models.CharField(max_length=100,null=True, blank=True, default=None)

您告诉Django sex字段在表单中是可选的。尝试删除它。