Django unique = True funktioniert nicht
Dies ist aus Djangos Dokumentation:
Field.unique
Wenn True, muss dieses Feld in der gesamten Tabelle eindeutig sein.
Dies wird auf Datenbankebene und durch Modellvalidierung erzwungen. Wenn Sie versuchen, ein Modell mit einem doppelten Wert in einem eindeutigen Feld zu speichern, wird von der save () -Methode des Modells ein django .db.IntegrityError ausgelöst.
Hier ist meine models.py
class MyModel(models.Model):
# my pk is an auto-incrementing field
url = models.URLField("URL", unique=True)
text = models.TextField(max_length=1000)
# my model is just two fields, one pk (unique), and another unique field,
#, the url
Hier ist mein manage.py sqlall (ich habe syncdb ausgeführt)
CREATE TABLE `MyModel_mymodel` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`url` varchar(200) NOT NULL UNIQUE,
`text` varchar(1000) NOT NULL,
In der manage.py-Shell kann ich dies jedoch frei tun:
>>> from MyModel.models import MyModel
>>> MyModel().save() # it works fine!? Not even the text was checked for!
>>> MyModel(url="blah").save()
>>> MyModel(url="blah").save() # it still works!
# I checked the mysql database afterwards, the models were saved just fine, they
# however did have different PK's (auto incrementing fields).
Ich benutze MySQL, Django 1.5. Hat jemand eine Idee, was dies verursachen könnte?
Ich verwende einen benutzerdefinierten Manager, bezweifle jedoch, dass dies das Problem ist.
Vielen Dank.