class Test(models.Model):
tags = models.ManyToManyField(Tag, related_name='test_tag')
...
我有
tests = Test.objects.filter(attr='something')
现在我想要所有与测试相关的标签对象。
我正在尝试:
Tags.objects.filter('test_tag__in'=tests)
但看起来不起作用
答案 0 :(得分:1)
您不应该在此处使用字符串文字作为键,这将导致语法错误,您可以将其写为:
Tag.objects.filter(test_tag__in=tests).distinct()
或者您甚至可以立即查询与Tag
相关的Test
与attr=something
相关的Tag.objects.filter(test_tag__attr='something').distinct()
,例如:
.distinct()
JOIN
是必要的,因为我们在这里执行Tag
,因此Test
对象可能与 multiple {{1 }}个tests
中的对象。通过删除.distinct()
,我们可以多次获得 same Tag
。当然,这本身不是问题,而是取决于“上下文”。)