Utilizzo di Django 1.5.1. Python 2.7.3.Django unico insieme errore di vincolo?
Volevo eseguire un vincolo unico univoco con un campo chiave esterna e un campo di interferenza. Così nel mio modello di meta, ho fatto
foreign_key = models.ForeignKey("self", null=True, default=None)
slug = models.SlugField(max_length=40, unique=False)
class Meta:
unique_together = ("foreign_key", "slug")
Ho anche controllato la descrizione della tabella in Postgres (9.1) e il vincolo è stato messo nella tabella del database.
-- something like
"table_name_foreign_key_id_slug_key" UNIQUE CONSTRAINT, btree (foreign_key_id, slug)
Tuttavia, ho potuto ancora salvare nella tabella del database un foreign_key di Nessuno/null e duplicare le stringhe.
Per esempio,
potevo immissione e salvare
# 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()
Così, dopo aver usato unique_together, perché posso ancora di ingresso e tre le stesse righe valutati?
Sto solo supponendo che potrebbe avere a che fare con il valore predefinito di None per il campo foreign_key, perché prima di unique_together, quando avevo solo unique = True su slug, tutto funzionava bene. Quindi, se questo è il caso, quale valore predefinito dovrei avere che indica un valore nullo, ma mantiene anche il vincolo univoco?
come si corregge questo? Esiste un valore che posso assegnare al campo chiave esterna o qualcosa di simile a univoco su slug se la chiave esterna è NULL? – Derek
Si prega di consultare l'aggiornamento. – Yossi
C'è un valore predefinito per una chiave esterna in postgres tale che il valore non verrà mai utilizzato in modo naturale? – Derek