2009-09-24 2 views
11

Мне нужно создать исключение в методе сохранения модели. Я надеюсь, что существует исключение, которое будет обнаружено любым django ModelForm, который использует эту модель, включая формы администратора.Raising ValidationError из метода сохранения модели django?

Я попытался поднять django.forms.ValidationError, но это, кажется, не было обнаружено формами администратора. Модель выполняет удаленный вызов процедуры в течение сэкономленного времени, и неизвестно до этого вызова, если вход действителен.

Спасибо, Пит

ответ

8

Там в настоящее время нет способа выполнения проверки в модели сохранения методов. Это, однако, разрабатывается, как отдельная ветвь валидации модели, и в ближайшие несколько месяцев ее следует объединить в магистраль.

А пока вам нужно выполнить проверку на уровне формы. Очень просто создать подкласс ModelForm с помощью метода clean(), который делает ваш удаленный вызов и соответственно создает исключение, и использовать его как в админе, так и в качестве основы для ваших других форм.

+3

django в последнее время меня напугало. Я пошел с таким подходом, но я не удовлетворен. Код, который модифицирует модель, не принадлежит к чистому методу. – slypete

+0

Просто зарегистрируйтесь, есть ли в этой ветке, о которой вы говорили, были объединены? – rennat

+5

Это часть Django 1.2: http://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects – Tom

10

Поскольку Django 1.2, это то, что я делал:

class MyModel(models.Model): 

    <...model fields...> 

    def clean(self, *args, **kwargs): 
     if <some constraint not met>: 
      raise ValidationError('You have not met a constraint!') 
     super(MyModel, self).clean(*args, **kwargs) 

    def full_clean(self, *args, **kwargs): 
     return self.clean(*args, **kwargs) 

    def save(self, *args, **kwargs): 
     self.full_clean() 
     super(MyModel, self).save(*args, **kwargs) 

Это имеет преимущество работы как внутри, так и за ее пределами администратора.

Смежные вопросы