В моей модели:Django: более сложное ограничение уникальности?
class MyModel(models.Model):
active = models.BooleanField()
path = models.CharField(max_length = 512)
Я хотел бы ограничить, что атрибут «путь» является уникальным среди тех случаев, когда активна ИСТИНА.
Кажется, что переопределение save() может не работать, как если бы два сейва выполнялись одновременно, оба могли пройти тест и продолжить и сохранить. Есть ли какой-то трюк или пользовательский SQL (я использую MySQL), который я мог бы использовать, чтобы иметь условное ограничение uniqness, подобное этому на уровне базы данных?
Хм, материал проверки кажется, что он эквивалентен переопределению save() (хотя и опережает при использовании форм). Однако обнуление поля вместо использования True/False - интересная идея. Думаю, у меня могло бы быть поле «неактивное», которое является True или None, а затем unique_together (path, inactive), да? – kdt
Вы могли бы. Я не уверен, что django правильно применит ограничение unique_together - возможно, это так, но я хочу проверить. Единственные причины, которые я предлагал бы сделать против этого, это то, что я немного пуританский о значениях NULL и как они семантически означают что-то другое для False. О, и администратор django, кажется, отклоняет значения NULL и заменяет их пустыми строками. –
Позвольте мне быть ясным: я люблю значения NULL, просто ненавижу, когда они не используются как NULL. –