Django从相关模型集

时间:2016-12-02 06:11:56

标签: python django django-models django-rest-framework

可以说,我在 models.py:

中有以下型号配置
class ModelA(models.Model):
    columnA = models.ForeignKey(ModelZ)
    created = models.DateTimeField(auto_now_add=True)

class ModelB(models.Model):
    columnB = models.ForeignKey(ModelA, related_name='modelsets')
    is_open = models.BooleanField()
    created = models.DateTimeField(auto_now_add=True)

我知道我可以使用 prefetch_related 操作选择所有ModelA对象和所有相关的ModelB对象。但在我的用例中,我想从ModelA中选择所有对象,并且只从ModelB对象中选择一个(或某些)相关的行来满足某些条件。

例如:

ModelA.objects.prefetch_related(' modelB_set')其中modelB__is_open = True 类似的东西。

预期输出为:

[{
    columnA : 1
    created : 'time'
    modelsets :[{
        columnB : 1
        is_open = True
        created = 'time'
    },{
        columnB : 2
        is_open = True
        created = 'time'
    }

},{
    columnA : 2
    created : 'time'
    modelsets :[{
        columnB : 3
        is_open = True
        created = 'time'
    }    
}]

我已经厌倦了谷歌搜索,任何更好地理解Django ORM查询的链接都会非常明显。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试使用Prefetch()对象

queryset_b = Model_B.objects.filter(is_open=True)
result=Model_A.objects.prefetch_related(Prefetch('modelsets', queryset=queryset_b))