使用 Django 1.5.1。蟒蛇 2.7.3。
我想用一个外键字段和一个 slug 字段做一个唯一的共同约束。所以在我的模型元中,我做到了
foreign_key = models.ForeignKey("self", null=True, default=None)
slug = models.SlugField(max_length=40, unique=False)
class Meta:
unique_together = ("foreign_key", "slug")
我什至检查了 Postgres (9.1) 中的表描述,并将约束放入数据库表中。
-- something like
"table_name_foreign_key_id_slug_key" UNIQUE CONSTRAINT, btree (foreign_key_id, slug)
但是,我仍然可以将 None/null 和重复字符串的 foreign_key 保存到数据库表中。
例如,
我可以输入并保存
# 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()
那么在使用 unique_together 之后,为什么我仍然可以输入三个相同值的行呢?
我现在只是猜测它可能与foreign_key字段的默认值None有关,因为在unique_together之前,当我在slug上只有unique = True时,一切正常。因此,如果是这种情况,我应该使用什么默认值来指示空值,同时保持唯一约束?