首页 > 解决方案 > 尊重 DRY django 的表单字段

问题描述

给定 Django 中的一些形式(为简单起见,请采用以下形式)

class LoginRegisterForm(forms.Form):

  email = forms.EmailField(label="Email", max_length=100)
  password = forms.CharField(label="Password", widget=forms.PasswordInput(), max_length=100)

如果提交了其他字段,我们会尝试限制这些表单的提交,因此我们在表单类中添加了以下方法

    def correct_fields(self):
      return set(self.data.keys()) == {"Email", "Password"}

而下面views.py这个表单的提交对应的方法中的代码:

if form.is_valid() and form.correct_fields:

我们如何避免必须在表单的定义和正确的字段方法中编写EmailPassword?如果没有提交正确的字段,django 是否提供内置功能来防止提交表单?(如果提供了正确的字段和一些附加字段,则仍会提交表单)。如果未提供此功能,如何避免两次写入字段?

标签: django

解决方案


未指定的字段required=False必填项。正如required=…参数 [Django-doc]上的文档所说:

默认情况下,每个Field类都假定该值是必需的,因此如果您传递一个空值——None 或空字符串 ( "") ——clean()则会引发ValidationError异常。

所以它已经验证了data确实包含emailand password。您可以定义可选字段:

class LoginRegisterForm(forms.Form):
    email = forms.EmailField(label="Email", max_length=100)
    password = forms.CharField(label="Password", widget=forms.PasswordInput(), max_length=100)
    info = forms.CharField(label="Tell us someting", required=False, intial='')

推荐阅读