Django:从多个对象中获取许多对象

时间:2018-10-27 10:11:43

标签: django

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)

但看起来不起作用

1 个答案:

答案 0 :(得分:1)

您不应该在此处使用字符串文字作为键,这将导致语法错误,您可以将其写为:

Tag.objects.filter(test_tag__in=tests).distinct()

或者您甚至可以立即查询与Tag相关的Testattr=something相关的Tag.objects.filter(test_tag__attr='something').distinct(),例如:

.distinct()

JOIN是必要的,因为我们在这里执行Tag,因此Test对象可能与 multiple {{1 }}个tests中的对象。通过删除.distinct(),我们可以多次获得 same Tag。当然,这本身不是问题,而是取决于“上下文”。)