如何获取Queryset中所有对象的所有ForeignKeys的django QuerySet

时间:2012-09-26 11:32:34

标签: django django-queryset

我有一个模型(或实际上有两个模型,但另一个模型不相关)

class Foo(models.Model):
    ...
    bar = models.ForeignKey(Bar,
        ...
    )

当我有一个Foo:s的QuerySet时,如何获取该QuerySet引用的所有Bar个实例?

由于我使用的是MySQL,我无法.distinct(['bar'])

3 个答案:

答案 0 :(得分:19)

foo_queryset = Foo.objects.filter(attr=value)
referenced_bars = Bar.objects.filter(id__in=foo_queryset.values('bar_id'))

答案 1 :(得分:0)

bars = Bar.objects.filter(foo_set__attr=value)

答案 2 :(得分:0)

您可以使用foo_queryset.bar_set.all()来获取Bar的所有实例

foo_queryset = Foo.objects.filter(attr=value)
referenced_bars = foo_queryset.bar_set.all()

Django documentation有更多详细信息。