Использование Django 1.5.1. Python 2.7.3.
Я хотел сделать уникальное ограничение вместе с полем внешнего ключа и полем слияния. Так что в моей метате модели я сделал
foreign_key = models.ForeignKey("self", null=True, default=None)
slug = models.SlugField(max_length=40, unique=False)
class Meta:
unique_together = ("foreign_key", "slug")
Я даже проверил описание таблицы в Postgres (9.1), и ограничение было помещено в таблицу базы данных.
-- something like
"table_name_foreign_key_id_slug_key" UNIQUE CONSTRAINT, btree (foreign_key_id, slug)
Однако я все же мог сохранить в таблице базы данных foreign_key из None/null и дублировать строки.
Например,
Я мог бы ввести и сохранить
# model objects with slug="python" three times; all three foreign_key(s)
# are None/null because that is their default value
MO(slug="python").save()
MO(slug="python").save()
MO(slug="python").save()
Итак, после использования unique_together, почему я могу по-прежнему вводить три одинаково ценные строки?
Я просто догадываюсь прямо сейчас, что это может иметь отношение к значению по умолчанию None для поля foreign_key, потому что перед unique_together, когда у меня только что было уникальное value = True на slug, все работало нормально. Итак, если это так, то какое значение по умолчанию должно иметь значение, указывающее нулевое значение, но также поддерживающее уникальное ограничение?