Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多对多表BooleanField中单个真值的约束_Python_Django - Fatal编程技术网

Python 多对多表BooleanField中单个真值的约束

Python 多对多表BooleanField中单个真值的约束,python,django,Python,Django,我希望实现以下目标: 可以在多个类别下标记列表 一个列表最多可以有一个主类别。这是最能描述它的类别,在它标记的所有类别中 管理员不能为一个列表标记多个主要类别 在mymodels.py中,我有: 来自django.db导入模型的 从django.db.models导入UniqueConstraint、CheckConstraint 类列表(models.Model): 标题=型号。CharField(最大长度=50), content=models.TextField(), 类别=型号.Many

我希望实现以下目标:

  • 可以在多个类别下标记列表
  • 一个列表最多可以有一个主类别。这是最能描述它的类别,在它标记的所有类别中
  • 管理员不能为一个列表标记多个主要类别
  • 在my
    models.py中,我有:

    来自django.db导入模型的
    
    从django.db.models导入UniqueConstraint、CheckConstraint
    类列表(models.Model):
    标题=型号。CharField(最大长度=50),
    content=models.TextField(),
    类别=型号.ManyToManyField(
    “类别”,
    通过class='CategoryMembership',
    相关的_name='listings'
    )
    类别(models.Model):
    标题=型号。CharField(最大长度=50),
    类别成员(models.Model):
    listing=models.ForeignKey(
    表册
    on_delete=models.CASCADE
    )
    类别=models.ForeignKey(
    类别
    on_delete=models.CASCADE
    )
    main_category=models.BooleanField(默认值=False)
    类元:
    约束=[
    唯一约束(
    name='unique\\列表\类别\成员资格',
    字段=['listing','category']
    )]
    
    为了实现2和3,我想我可以为
    CategoryMembership
    Meta
    类添加另一个约束。但是我不知道如何继续,因为我不想阻止列表中有多个类别,其中
    main\u category==False

    这样的限制可能吗?还是有更聪明的方法来构建模型以实现这一点?

    请参见

    我会尝试:

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