【问题标题】:BooleanField returning "on" instead of True/FalseBooleanField 返回“on”而不是 True/False
【发布时间】:2020-06-17 14:53:17
【问题描述】:

我有一个布尔字段返回“on”而不是 True/False。

当我打印 request.POST queryDict 时,我得到如下信息:

 <QueryDict: {is_superuser': ['on']}>`

这是我的表格:

class UserCreateForm(UserCreationForm):
    is_superuser = forms.BooleanField(label = 'Superuser', initial = False, required = False)

    class Meta():
        fields = ('first_name', 'last_name', 'email', 'departments', 'password1', 'password2', 'is_superuser')
        model = get_user_model()

    def clean_is_superuser(self):
        return self.cleaned_data['is_superuser'] == True

我的看法:

class SignUpView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'accounts/signup.html', context = {'form':UserCreateForm})

    def post(self, request, *args, **kwargs):
        form = UserCreateForm(request.POST)

        if form.is_valid():
            user = form.save(commit = False)
            user.username = request.POST.get('email')
            user.is_superuser = request.POST.get('is_superuser')
            print(request.POST)
            user.save()

            return HttpResponseRedirect(reverse_lazy('accounts:allProfilesPage'))
        return HttpResponse('Form not valid')

为什么布尔字段不传递 True 或 False?我什至使用了干净的数据功能..

【问题讨论】:

  • 为什么你使用is_superuser 的值来自request.POST 而不是来自表单?此外,我不认为你的 clean_is_superuser() 会在任何地方被调用......
  • 你是对的!我很抱歉.. 昨天我问了一个基本问题,也是你回答了我.. 谢谢你这么宽容。你说得对,“干净”函数没有做任何事情。我只是认为布尔字段可能返回一些其他值而不是 False

标签: python django


【解决方案1】:

正如@Arakkal Abu 已经回答的那样:

class SignUpView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'accounts/signup.html', context = {'form':UserCreateForm})

    def post(self, request, *args, **kwargs):
        form = UserCreateForm(request.POST)

        if form.is_valid():
            user = form.save(commit = False)
            user.username = form.cleaned_data['email']
            user.is_superuser = form.cleaned_data['is_superuser']

            user.save()

            user.departments.set(form.cleaned_data['departments'])

            return HttpResponseRedirect(reverse_lazy('accounts:allProfilesPage'))
        return HttpResponse('Form not valid')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2016-03-23
    • 2014-04-24
    相关资源
    最近更新 更多