在我的Django模型中,只有一个值可以是主要值,而其余值是可选的。
在我的模特中:
@with_author
class BOMVersion(models.Model):
name = models.CharField(max_length=200,null=True, blank=True)
description = models.TextField(null=True, blank=True)
tomaterial = models.ForeignKey(Material, related_name = 'tomaterial')
status = models.CharField(max_length=1, choices=STATUS_CHOICES)
BOM_CHOICES = (
('M','Main'),
('A','Additional'),
)
我应该能够用这样的数据填充这个模型,这样只有一行' status
将具有 Main 的值,而其余的将始终为 Additional 。 (当只能选择值时,它完全是单选按钮功能。)
例如:
1 v1 ...A
2 v2 ...M
3 v3 ...A
.........
n vn ...A
我提出了一个解决方法,其中添加的所有值将始终是附加的,并且将具有带单选按钮的单独UI,其中用户将选择应该是主要值的值。
但是想知道有没有办法直接将这个逻辑应用于Django模型?
答案 0 :(得分:2)
如果您的数据库支持它,partial unique index是一个很好的方法。在PostgreSQL中,它看起来像这样:
CREATE UNIQUE INDEX bom_constraint ON appname_bomversion (status) WHERE status = 'M';
从版本2.2开始,Django支持declarative partial unique indexes。在旧版本中,您需要使用迁移。有关详细信息,请参阅this answer。