python - 如何检测是否在 ModelForm.clean 中添加或编辑了 obj?
问题描述
无论用户是添加新对象还是更改现有对象,我都想以不同方式验证用户提交的数据。如果对象已经存在(如果它存在于 db 上,则正在添加),除了 id 之外没有模型的属性可以在 db 上检查。其他方法,比如save_model,传入了一个add参数,可以查看,但是modelform.clean中没有这个参数。如何在 modelform.clean 中进行验证?
MyModelForm(forms.ModelForm):
def clean(self):
if add :
validation_A()
else:
validantion_B()
解决方案
在数据库级别不存在的对象有一个id
(也许最好使用pk
),即None
(因为id
是在数据库中插入时确定的,Django 不会分配该 id)。
所以我们可以检查是否self.instance.pk is None
:
MyModelForm(forms.ModelForm):
def clean(self):
if self.instance.pk is None: # add
validation_A()
else: # edit
validantion_B()
当然,上述方法可以被“欺骗”,因为在创建过程中传递对象之前,您可以设置id
to None
,但是Model.save(..)
对象也使用这个事实来决定是执行INSERT INTO
还是执行UPDATE
。
推荐阅读
- curl - POST 请求在 Postman 中有效,但在 Python 请求中无效(200 响应机器人检测)
- reactjs - 将图像添加到对象数组的最佳方法
- angular - 造型 Angular 7 材质图标行
- python - 将顶级模块放在“lib”目录中
- windows - 如何使用 PowerShell 启用 FSRM 配额
- c# - 在下拉列表中仅显示上个月的名称(根据财政年度)
- python-2.7 - Corenlp.py 不加载任何模块
- node.js - 找不到增加内存限制命令
- c# - 我希望我们从 URL 中获取一个值作为我的 sql 数据源 sql 语句的条件
- shell - 重置位置参数并考虑参数中的空格