繁体   English   中英

通过表 BooleanField 对多对多中单个 True 值的约束

[英]Constraint of a single True value in many-to-many through table BooleanField

我想实现以下目标:

  1. 列表可以标记在多个类别
  2. 一个列表最多可以有一个主要类别。 这是最能描述它的类别,在它标记的所有类别中。
  3. 管理员不应该能够为单个列表标记多个主要类别

在我的models.py ,我有:

from django.db import models
from django.db.models import UniqueConstraint, CheckConstraint

class Listing(models.Model):
  title = models.CharField(max_length=50),
  content = models.TextField(),
  categories = models.ManyToManyField(
    'Category',
    through='CategoryMembership',
    related_name='listings'
  )

class Category(models.Model):
  title = models.CharField(max_length=50),
                                      
class CategoryMembership(models.Model):
  listing = models.ForeignKey(
    Listing,
    on_delete=models.CASCADE
  )
  category = models.ForeignKey(
    Category,
    on_delete=models.CASCADE
  )
  main_category = models.BooleanField(default=False)
  
  class Meta:
    constraints = [
      UniqueConstraint(
        name='unique_listing_category_membership',
        fields=['listing', 'category']
      )]

为了实现 2 和 3,我想我可以向CategoryMembershipMeta class 添加另一个约束。 但我不知道如何继续,因为我不想阻止列表中有多个类别,其中main_category == False在 through 表中。

这样的约束可能吗? 或者有没有更聪明的方法来构建模型来实现这一点?

https://docs.djangoproject.com/en/3.1/ref/models/constraints/#condition

我会尝试:

UniqueConstraing(
    name='name', 
    fields=['listing'], 
    condition=Q(main_category=True),
)

暂无
暂无

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

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