2016-08-09 66 views
0

在Django中,我有两个型号:Django的:筛选一个QuerySet和选择的结果外键

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'

预期结果: 含有一个QuerySet仅A对象

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

+0

不知道你在期待什么。 'filter()'返回一个查询集,而不是一个实例,所以它不会有'a'属性;查询集中的元素具有该属性。 –

回答

4

我假定你正在寻找的东西像

result = A.objects.filter(b__member=True) 
1

安德烈扎鲁宾的回答另一种方法是遍历你有查询集,并创建一个对象的列表。

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

下面的代码不会过滤一切,但它会过滤所有的值相对于外地,可能是你正在寻找相同

B.objects.filter(成员= TRUE).filter(a__somefield ='一些值')