Django:如何检查用户是否将所有字段留空(或留空到初始值)?

2024-05-19 01:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有界表单上的is_valid()检查是否输入了所有必需的数据。这不是我想要的。我想检查表单上是否填写了任何字段。

有什么想法吗?

详细说明:

我想让用户选择完全不填写表单。但是,如果他们试图填充它(即:从字段的初始值更改字段中的值,通常为空值),我想验证它。

视图如下:

def get_opinion(request):

    if request.method == 'POST':
        f = OpinionForm(request.POST)
        if form_is_blank(f):
            return HttpResponseRedirect(reverse('thank_you_anyway'))
        elif f.is_valid():
            #Process here
            return HttpResponseRedirect(reverse('thanks_for_participating'))
    else:
        initial = {'weekday': date.today().strftime('%A')}
        f = OpinionForm(initial=initial)

    return render_to_response(
        'get_opinion.html',
        {'form': f,},
        RequestContext(request)
    )

我想要的是form_is_blank()部分。


Tags: form表单getreturnifisrequestpost
3条回答

您应该为表单中的所有字段设置required=False,并重写clean方法来执行自定义验证。有关详细信息,请参见the current documentation

要使此功能适用于实际<;表单>;标记中使用的表单子集,还需要定义

class YourForm(forms.ModelForm):
    def full_clean(self):
        if not self.has_changed():
            self._errors = ErrorDict()
            return

        return super(YourForm, self).full_clean()

因此,当提示用户修复验证错误时,仅当某些值不为空(或默认值)时,才会显示要验证的表单中的错误。

我想我得回答我自己的问题。

显然,这里有一个未记录的Form函数:has_changed()

>>> f = MyForm({})
>>> f.has_changed()
False
>>> f = MyForm({})
>>> f.has_changed()
False
>>> f = MyForm({'name': 'test'})
>>> f.has_changed()
True
>>> f = MyForm({'name': 'test'}, initial={'name': 'test'})
>>> f.has_changed()
False

所以这可以很好地替代form_is_blank()(当然是还原的)。

相关问题 更多 >

    热门问题