Django:过滤QuerySet并选择结果外键

时间:2016-08-09 12:54:24

标签: python django django-models

在Django中,我有两个模型:

class A(models.Model):
    # lots of fields

class B(models.Model):
    a = models.ForeignKey(A)
    member = models.BooleanField()

我需要构建一个过滤B并选择所有A的查询,如下所示:

result = B.objects.filter(member=True).a

上面的示例代码当然会返回错误QuerySet has no attribute 'a'

预期结果: 仅包含A对象的QuerySet

什么是实现所需功能的最佳和最快方式?

3 个答案:

答案 0 :(得分:4)

我假设您正在寻找类似

的内容
result = A.objects.filter(b__member=True)

答案 1 :(得分:1)

Andrey Zarubin回答的另一种方法是迭代你拥有的查询集并创建一个对象列表。

b_objects = B.objects.filter(member=True)
a_objects = [result.a for result in b_objects]

答案 2 :(得分:0)

下面的代码不会过滤所有内容,但会过滤掉相关字段的所有值,可能是您正在寻找相同的

B.objects.filter(member = True).filter(a__somefield =' some value')