Django-确保每个用户只有一个ACTIVE产品



拥有此型号

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)

我正试图弄清楚如何制作只有一个产品ACTIVEUser模型。User可以有任意数量的CANCELLEDDRAFT产品,但只能有一个是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之后才引入的,而且并不是所有数据库本身都强制执行这样的约束。

相关内容

最新更新