python - Django clean() 更改字段要求
问题描述
我想改变一些modelForm字段的要求,如下所示。
certs
是一个复选框。如果此复选框为“True”,则ca
,cert
和key
字段应为必填项。如果不是,它们应留空(null=True
在模型中设置)。
class CreateMVPConnectionsForm(forms.ModelForm):
class Meta:
model = MVPConnections
fields = '__all__'
exclude = ['created_by_user', 'parent_project_id']
def clean(self):
print("clean started")
cleaned_data = super().clean()
certs = cleaned_data.get('certs')
ca = cleaned_data.get('ca')
cert = cleaned_data.get('cert')
key = cleaned_data.get('key')
if certs == True:
if ca and cert and key:
pass
else:
raise ValidationError(_('If certs is checked, please fill in "ca", "cert" and "key".'))
else:
ca = forms.CharField(required=False)
cert = forms.CharField(required=False)
key = forms.CharField(required=False)
关于如何解决这个问题的任何建议?
解决方案
尽管使用 Field
类的主要方式是在 Form
类中,但您也可以实例化它们并直接使用它们来更好地了解它们的工作方式。每个 Field
实例都有一个 clean()
方法,该方法接受一个参数并引发 django.forms.ValidationError
异常或返回干净的值:
>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
'foo@example.com'
>>> f.clean('invalid email address')
Traceback (most recent call last): ... ValidationError: ['Enter a valid email address.']
推荐阅读
- python-3.x - 比较图像以发现图像明显相同
- python - 连接两个具有不同索引长度的 Pandas DataFrame 列
- database - neo4j 查询列表中至少包含一项的数组字段
- git - Git - 在跳过子模块的分支之间同步特定文件
- javascript - React Native 日历选择器给出 null
- python - dns.resolver.Resolver() 如何找到域名服务器?
- javascript - 如何使用 JavaScript 和 AJAX 在 JSP 中提交表单?
- firebase - Firebase firestore 离线持久性是否适用于离线电子 js 应用程序?
- java - 使用 Java FXML 暂停
- performance - 连接的性能问题