Django-隐藏“此字段为必填字段。”用于BooleanField

时间:2020-06-20 20:18:41

标签: django forms templates

我只想显示一个用户必须单击以确认已采取通知的复选框:

class CheckForm(forms.Form):
    confirmed = forms.BooleanField(required=True)

    def __init__(self, *args, **kwargs):
        super(CheckForm, self).__init__(*args, **kwargs)
        self.fields['confirmed'].label = 'I confirm that I have taken notice'

现在的问题是我的表单显示以下标签:“此字段为必填。”在模板输出。当我在views.py:

中调用表单时,这也很有意义
form = CheckForm(request.POST)

是否有任何解决方法只能将提到的标签隐藏在我的模板上,并保持required = True? 只需在forms.py中执行required = False 或从views.py中删除request.POST 不是解决方案,因为此字段是每个定义的必填字段,并且“ if form.is_valid():”不验证是否缺少request.POST

views.py

def check(request):
    form = CheckForm(request.POST)
    user = User.objects.get(user=request.session.get('user'))
    if request.method == 'POST':
        if form.is_valid():
            user.token_checked = True
            user.save()
            messages.success(request, 'Thanks for your check-up, you are now able to login again.')
            return redirect(reverse('login'))
        else:
            return render(request, 'check.html')
    else:
        if not user.token_checked:
            username = str(user)
            token = str(user.reset_token)
            args = {
                'token': token,
                'username': username,
                'form': form
            }
            return render(request, 'check.html', args)

2 个答案:

答案 0 :(得分:0)

对于BooleanField来说是必需的,没有任何意义。 BooleanField可以为true或false,而html表单中false的表示形式是一个空复选框,该复选框很不错:为空。参见docs

答案 1 :(得分:0)

找到了可以接受的解决方案,我只需这样做:

self.fields['reset_token'].error_messages = {'required': 'My custom message to display'}

可悲的是,这并没有完全隐藏邮件,但至少可以接受 如果您只希望用户确认您的网站/服务的某些条款。