拥有此型号
class Product(models.Model):
user = models.ForeignKey(...)
STATUS_ACTIVE = 'active'
STATUS_CANCELLED = 'cancelled'
STATUS_DRAFT = 'draft'
STATUS_CHOICES = (
(STATUS_ACTIVE,'Active'),
...
)
status = models.CharField(..., choices=STATUS_CHOICES)
我正试图弄清楚如何制作只有一个产品ACTIVE
的User
模型。User
可以有任意数量的CANCELLED
和DRAFT
产品,但只能有一个是ACTIVE
。
我在考虑CheckConstraint
,但我搞不清这样的问题。
您可以使用UniqueConstraint
,但前提是status
处于活动状态:
from django.db.models import Q
class Product(models.Model):
user = models.ForeignKey(…)
STATUS_ACTIVE = 'active'
STATUS_CANCELLED = 'cancelled'
STATUS_DRAFT = 'draft'
STATUS_CHOICES = (
(STATUS_ACTIVE,'Active'),
…
)
status = models.CharField(…, choices=STATUS_CHOICES)
class Meta:
constraints = [
UniqueConstraint(
fields=['user'],
condition=Q(status=STATUS_ACTIVE),
name='one_user_per_active_product'
)
]
condition=…
参数[Django-doc]是在Django-3.0之后才引入的,而且并不是所有数据库本身都强制执行这样的约束。