如何按需验证 Django.ModelForm 表单,但不在编辑时验证
我在处理项目时遇到了问题。 Django Forms.ModelForm 在创建时需要验证,但在发布时不验证。但在网上找不到对应的方法
我的代码:admin.py
#定义一个新表单
class XfForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(XfForm, self).__init__(*args, **kwargs)
pass
def clean_Title(self):
# 校验数据前,都需要获取到被校验的数据
title = self.cleaned_data['Title']
# 开始校验:判断数据库中是否已存在同样的Title
exists = LouPan.objects.filter(Title=title).exists()
if exists:
raise ValidationError('标题已存在')
return title
class Meta:
model = LouPan
exclude = []
class LouPanAdmin(admin.ModelAdmin):
...
form = XfForm#引用上面自定义表单
def save_model(self, request, obj, form, change):
...
obj.save()
当网站查询失败时,我只能看自己的代码,想解决办法。后来我想看看 Forms.ModelForm 中有哪些可用的函数,所以我尝试看看“self”下有哪些可用的功能
在 clean_Title 中输入 self,然后输入英文“.”,然后发现一些自我显示。什么功能,然后我大致看了下
它有“改变的数据”然后我冲刺(self.changed data)看看那里有什么
sprint(self.changeddata)
#新建时
['Title', 'PyTitle', 'ShangQuan', 'LPDZ', 'ZuoBiao', 'KFS', 'TDNX', 'CPLX', 'JZLX', 'XMTS', 'JFZT', 'ZDMJ', 'JZMJ', 'TCW', 'LDZS', 'LDL', 'RJL', 'WuYe', 'WYF', 'GongNuan', 'XSZT', 'SLDZ', 'KPSJ', 'JFSJ', 'Tua
nGou', 'NeiBu', 'JiaoTong', 'JiaoYu', 'GouWu', 'YiYuan', 'Content', 'Intro', 'ThumImg']
#修改时,这里我只修改了ShangQuan和TDNX这两个字段
['ShangQuan', 'TDNX']
这时候我发现我可以通过他们自己来控制它。改变了数据。当名称出现在更改的数据中时,验证该字段是否合法。如果没有,直接返回
编辑admin.py中的XfFrom代码
class XfForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(XfForm, self).__init__(*args, **kwargs)
pass
def clean_Title(self):
# 校验数据前,都需要获取到被校验的数据
title = self.cleaned_data['Title']
# 开始校验:判断数据库中是否已存在同样的Title
print('=======================',self.changed_data)
changeddata=self.changed_data
if 'Title' in changeddata:
exists = LouPan.objects.filter(Title=title).exists()
if exists:
raise ValidationError('标题已存在')
return title
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。