我不认为你能用你目前的模式做到这一点,但如果这是唯一的两个选择
level
字段,考虑将其更改为可以为空的
BooleanField
例如,
is_main = models.BooleanField(null=True)
并将其设置为
None
对于二级帐户。然后一个
unique_together
将起作用,因为就SQL而言,每个空值都是唯一的(请参见
this answer
)
因为有更多的选择
水平
字段,正如您稍后澄清的,您可以添加第三个字段,并可能重写
.save()
方法将其自动设置为
没有
如果
水平
不是
"m"
为了额外的便利。
编辑:
如果您不关心可移植性,
@Trent
建议PostgreSQL支持部分唯一索引,例如:
create unique index u_i on accounts(user_id, level_id) WHERE level_id = 'm';
这是一个
SQL Fiddle
.