Джанго: более сложное ограничение уникальности? - PullRequest
2 голосов
/ 07 сентября 2011

В моей модели:

class MyModel(models.Model):
  active = models.BooleanField()
  path = models.CharField(max_length = 512)

Я хотел бы ограничить, чтобы атрибут 'path' был уникальным среди случаев, когда active равен True.

Кажется, что переопределение save () можетне работает, как будто два сохранения выполняются одновременно, оба могут пройти тест и продолжить и сохранить.Есть ли какой-то трюк или пользовательский SQL (я использую MySQL), который я мог бы использовать, чтобы иметь такое условное ограничение уникальности на уровне базы данных?

1 Ответ

2 голосов
/ 07 сентября 2011

То, что вы, вероятно, ищете, это проверка модели. Это было введено в 1.2 и довольно хорошо задокументировано. Экземпляры моделей Django: проверка объектов

Несмотря на то, что вы можете написать какой-то хитрый SQL для этого, если все строки базы данных создаются с помощью Django ORM, проверка модели является более приемлемым решением.

В сторону: меня интересует, как бы вы сделали это на уровне базы данных, если не считать некоторого уровня триггера предварительной фиксации. Уникальность одного значения, зависящего от того, что другое истинно, - это то, что я не видел шаблон для. Наличие уникального ограничения в 2 поля на active + path позволит 1 false, 1 true и любое количество NULL активных строк для заданного значения пути (при условии, что active имеет значение null, например, NullBooleanField)

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