我有一个自定义验证器,用于Post
模型中的字段
在管理界面中,验证器的目的是验证
没有其他帖子具有相同的url
和category
,但我找不到
区分更新或新Post
的方式;在这种情况下
对于存在post
而言,更新是没有问题的
相同的网址和类别。
这是验证器:
class MyPostAdminForm(forms.ModelForm):
class Meta:
model = Post
def clean_url(self):
url = self.cleaned_data['url']
# if doesn't have any category then
# just return the url to handle the error.
try:
cat = self.cleaned_data['category']
except KeyError:
return url
if UPDATE: # UPDATE???
#DON'T COMPLAIN IF IS THE SAME, RETURN THE URL
return url
else: # IS NEW!
try:
Post.objects.get(category=cat, url=url)
except Post.DoesNotExist:
return url
else:
raise forms.ValidationError('Already exists post with category "%s" and url "%s"'%(cat, url))
有什么想法吗?
答案 0 :(得分:4)
没有必要这样做:如果在模型的Meta类中设置unique_together
,管理员将自动验证是否存在具有相同组合的其他实例。
但是,要回答一般问题,判断这是否为更新的方法是检查self.instance
是否存在并且pk
字段的值是否为。
if hasattr(self, 'instance') and self.instance.pk is not None:
#update
else:
#new