这是从Django的文档中摘录的:
领域唯一的
如果为True,则此字段在整个表中必须是唯一的.
这是在数据库级别和通过模型验证实现的.
这是我的模型.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
这里我的是manage.py sqlall(我运行了syncdb)
CREATE TABLE `MyModel_mymodel` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`url` varchar(200) NOT NULL UNIQUE,
`text` varchar(1000) NOT NULL,
然而,在管理方面.py shell,我可以自由地这样做:
>>> 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).
我使用的是MySQL,Django 1.5.有人知道这是什么原因吗?
我使用的是定制管理器,但我怀疑这是问题所在.
谢谢