如何检测django管理表单验证器中的更新

时间:2010-12-07 11:53:11

标签: django django-admin django-forms

我有一个自定义验证器,用于Post模型中的字段 在管理界面中,验证器的目的是验证 没有其他帖子具有相同的urlcategory,但我找不到 区分更新或新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))

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

没有必要这样做:如果在模型的Meta类中设置unique_together,管理员将自动验证是否存在具有相同组合的其他实例。

但是,要回答一般问题,判断这是否为更新的方法是检查self.instance是否存在并且pk字段的值是否为。

if hasattr(self, 'instance') and self.instance.pk is not None:
    #update
else:
    #new