[英]Django - ensure there is only one ACTIVE product per user
有这个 model
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)
我试图弄清楚如何让User
model 只有一种产品是ACTIVE
。 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之后引入,而且并非所有数据库本身都强制执行此类约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.