Django forms.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有哪些功能,然后我就大体看了一下
其中有一个“changeddata”,然后我就sprint(self.changeddata)看一下有什么
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']
此时发现,我好像可以通过self.changeddata来控制,当Title在changeddata中时,则验证这个字段合不合法,如果不在则直接return
修改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
THE END