如何创建此查询集?

时间:2019-04-23 19:12:41

标签: django django-queryset

我有以下三种模型:

class Category(models.Model):
    name = models.CharField(max_length=120)

class Experiment(models.Model):
    name = models.CharField(max_length=50, unique=True)
    categories = models.ManyToManyField(Category)

class Ad(models.Model):
    experiment = models.ForeignKey(Experiment, related_name='ads', on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.PROTECT, blank=True, null=True)

我想创建一个查询集,该查询集返回ad.category在ad.experiment.categories中的所有广告。

一些要讨论的示例数据: 类别:['Cat1','Cat2','Cat3',Cat4','Cat5']

实验:[['Exp1',['Cat2','Cat3]],['Exp2',['Cat5','Cat1']]]

广告:[[''Exp1','Cat4'],['Exp1','Cat2']]

我希望创建的查询集将仅返回第二个广告,因为该广告的类别在该广告的实验类别中。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您需要遍历相反的关系进行实验,然后使用F对象访问查询中ad的{​​{1}}字段。之所以使用“与众不同”是因为该实验将具有多个类别,因此一个广告在比较中可能具有多个匹配项。

category