繁体   English   中英

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

[英]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可以拥有任意数量的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]仅在之后引入,而且并非所有数据库本身都强制执行此类约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM