2016-12-09 3 views
0

Интересно, предлагает ли Django эту функцию некоторые другие веб-фреймворки, такие как Ruby on Rails. Я говорю о помощи, чтобы запретить некоторые государства, где значения атрибутов сохраняются, например:Модель Django: запрещать состояния с определенными значениями

model.active = False 
model.authorized = True 
model.save() # this should fail 

Мы можем иметь model, где оба active и authorized либо оба True или False, но мы не можем иметь любой другой комбинация. Извините, но сейчас я не могу придумать лучшего примера, надеюсь, что намерение понято.

Итак, есть ли у Django какие-либо средства для обработки этих ситуаций? Или реализовать его сами, когда вызван метод save?

ответ

0

Вы можете переопределить метод сохранения на своей модели.

class TestModel(models.Model): 
    def save(self, *args, **kwargs): 
     if self.active == False and self.authorized == True: 
      raise ValidationError("Some descriptive text here") 
     else: 
      return super(TestModel, self).save(*args, **kwargs) 

Это самый простой способ сделать это, но не самый лучший.

Вы можете также сделать модель проверки переопределения метода clean, но затем full_clean должен вызываться явно перед вызовом сохранения, если не использовать это через ModelForm

Третий метод применяется только тогда, когда вы используете форму, чтобы принять изменения, и в этом случае вы можете переопределить clean, как указано выше, но метод full_clean модели - это методы формы clean, вызываемые при вызове метода формы is_valid.

+1

Не все представления могли бы [обрабатывать ошибки проверки] (http://stackoverflow.com/a/8771090/1324033). Чистые методы были бы правильным способом – Sayse

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