Django - ограничения модели на основе выражений - PullRequest
2 голосов
/ 01 июня 2010

Можно ли установить ограничение на основе выражений для объекта модели Django, например, Если я хочу наложить ограничение, где владелец может иметь только один виджет заданного типа, который не находится в состоянии с истекшим сроком, но может иметь столько же, сколько истек. Очевидно, что я могу сделать это, переопределив метод save, но мне интересно, можно ли это сделать, установив ограничения, например, некоторая производная от ограничения unique_together

 WIDGET_STATE_CHOICES = (
    ('NEW', 'NEW'),
    ('ACTIVE', 'ACTIVE'),
    ('EXPIRED', 'EXPIRED')
)

class MyWidget(models.Model):
    owner = models.CharField(max_length=64)
    widget_type = models.CharField(max_length = 10)
    widget_state = models.CharField(max_length = 10, choices = WIDGET_STATE_CHOICES)

    #I'd like to be able to do something like
    class Meta:
        unique_together = (("owner","widget_type","widget_state" != 'EXPIRED')

Ответы [ 3 ]

2 голосов
/ 01 июня 2010

Звучит как работа для новой поддержки проверки модели в Django 1.2.

0 голосов
/ 01 июня 2010

В этом заключается проверка формы на основе модели.

Определите форму с помощью метода clean, который реализует эти дополнительные правила.

Всегда используйте метод формы save для создания новых объектов модели, которые проходят правила проверки.

http://docs.djangoproject.com/en/1.2/ref/forms/validation/#ref-forms-validation

http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method

0 голосов
/ 01 июня 2010

Нет, я не думаю, что это будет летать. Модель ожидает кортеж кортежей , а затем база формы модели, которая проверяет, кажется, захватывает и сравнивает значения , а не запускает выражения.

Тем не менее, вы можете сделать это в save (), как вы говорите - или с помощью проверки модели, как указывает DR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...