如何强制只有Model的所有对象中的单个对象具有字段的指定值

时间:2014-09-16 10:00:45

标签: django database-design django-models django-orm

我正在编写ModelX模型,它会有几个obj1,obj2等

ModelX有一个字段fieldX

我想确保对于所有obj1,obj2,obj3等,其中只有一个有fieldX =“XXX”,而其他人都没有

我可以在pre_save()或post_save()中放置断言,但有没有更简洁的方法在数据库级别执行此操作,以便它引发IntegrityError?

由于

更新

我有一个Link模型,它有一个用户的外键,一个access_token = textfield,和bool is_active

我想强制执行任何时候,对于特定用户的Link对象,只有零个或一个对象可以有is_active True,并且任意数量的对象都可以有is_active = False

2 个答案:

答案 0 :(得分:1)

UNIQUE约束适用于True和False值。如果你真的想要使用它,你必须使is_active字段可以为空并使用None(NULL)而不是False,因为两个NULL不被认为是相等的(至少在PostgreSQL和MySQL中)。

答案 1 :(得分:0)

是的,请使用' unique'模型定义https://docs.djangoproject.com/en/dev/ref/models/fields/#unique

中的字段选项