Korzystanie z Django 1.5.1. Python 2.7.3.Niepowtarzalne niepowodzenie wiązania Django razem?
Chciałem zrobić unikalne ograniczenie ze sobą za pomocą pola klucza obcego i pola ślimaka. Więc w moim modelu meta, zrobiłem
foreign_key = models.ForeignKey("self", null=True, default=None)
slug = models.SlugField(max_length=40, unique=False)
class Meta:
unique_together = ("foreign_key", "slug")
I nawet sprawdziłem opis tabeli w PostgreSQL (9.1) i ograniczenie oddano do tabeli bazy danych.
-- something like
"table_name_foreign_key_id_slug_key" UNIQUE CONSTRAINT, btree (foreign_key_id, slug)
Jednak nadal można zapisać do tabeli bazy danych klucz obcy Brak/zero i duplikaty ciągów.
Na przykład
mogłem wejście i zapisać
# 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()
więc po użyciu unique_together, dlaczego mogę jeszcze trzy wejścia tych samych cenionych wierszy?
Po prostu zgaduję, że może to mieć związek z domyślną wartością None dla pola foreign_key, ponieważ przed unique_together, kiedy miałem unikalny = True na ślimaku, wszystko działało dobrze. Więc jeśli tak jest, jaką wartość domyślną powinienem mieć, która wskazuje wartość zerową, ale także utrzymuje unikalne ograniczenie?
Jak mogę to poprawić? Czy istnieje wartość, którą mogę przypisać do pola klucza obcego lub coś podobnego do unikatowego, jeśli klucz obcy ma wartość NULL? – Derek
Proszę zobaczyć aktualizację. – Yossi
Czy istnieje wartość domyślna dla klucza obcego w postgresie, że wartość nigdy nie będzie naturalnie używana? – Derek