我有以下三种模型:
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']]
我希望创建的查询集将仅返回第二个广告,因为该广告的类别在该广告的实验类别中。
任何帮助将不胜感激!
答案 0 :(得分:0)
您需要遍历相反的关系进行实验,然后使用F
对象访问查询中ad
的{{1}}字段。之所以使用“与众不同”是因为该实验将具有多个类别,因此一个广告在比较中可能具有多个匹配项。
category