これはdjangoのドキュメントからのものです:
Field.unique
True の場合、このフィールドはテーブル全体で一意である必要があります。
これは、データベース レベルで、モデルの検証によって適用されます。一意のフィールドに重複する値を持つモデルを保存しようとすると、モデルの save() メソッドによって django .db.IntegrityError が発生します。
これが私の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
ここで私は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,
しかし、manage.py シェルでは、これを自由に行うことができます。
>>> 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を使用しています。誰がこれを引き起こしている可能性があるのか 考えていますか?
カスタムマネージャーを使用していますが、それが問題だとは思いません。
ありがとう。