django - 尊重 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:
我们如何避免必须在表单的定义和正确的字段方法中编写Email
和Password
?如果没有提交正确的字段,django 是否提供内置功能来防止提交表单?(如果提供了正确的字段和一些附加字段,则仍会提交表单)。如果未提供此功能,如何避免两次写入字段?
解决方案
未指定的字段required=False
为必填项。正如required=…
参数 [Django-doc]上的文档所说:
默认情况下,每个
Field
类都假定该值是必需的,因此如果您传递一个空值——None 或空字符串 (""
) ——clean()
则会引发ValidationError
异常。
所以它已经验证了data
确实包含email
and 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='')
推荐阅读
- mysql - 在 Google Cloud Build 期间运行数据库迁移失败并出现 ENOTFOUND 错误
- c++ - Android Studio,通过 JNI 将本机 C++ 代码添加到 Android 应用的第二个 Activity
- javascript - Microsoft DeviceCode 身份验证返回“无效请求”错误
- python - Bittrex API v3:错误'invalidRequestParameter':'marketSymbol'
- javascript - 如何将数组合并到 JSON 数组中
- python - 为什么python会这样运行?
- php - 我的码头工人不生成资产(混合)(Laravel)
- python - 带有枚举的 Python For 循环:“字符串索引超出范围”
- c# - Xamarin 表单在按钮单击事件处理程序上检索学生详细信息 Id
- c - 继续打印链表中的最后一个元素