Как обнаружить обновление в валидаторе формы администратора django - PullRequest
3 голосов
/ 07 декабря 2010

У меня есть специальный валидатор для поля в модели Post, которое будет использоваться в интерфейсе администратора цель валидатора - проверить что ни один другой пост не имеет таких же url и category, но я не могу найти способ отличить обновление от нового Post; который в случае обновления не будет проблем с существованием post с тот же URL и категории.

Вот валидатор:

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 Ответ

4 голосов
/ 07 декабря 2010

Нет необходимости делать это: если вы установите unique_together в мета-классе вашей модели, администратор автоматически проверит, что не существует другого экземпляра с такой же комбинацией.

Однако, чтобы ответить на общий вопросЧтобы узнать, является ли это обновление, нужно проверить, что self.instance существует и имеет значение для поля pk.

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