Django Queryset的注释只返回一个结果

时间:2016-05-02 18:29:01

标签: django django-models django-views django-queryset

我有一个名为Schedule的模型,它有一个ManyToManyField,roomId。这会链接到Room模型,该模型具有重要的ForeignKeybuildingId

对于我的QuerySet,我需要每个buildingId的{​​{1}}列表。

我尝试过的事情:

roomId

还有:

queryset = Schedule.objects.all().annotate(buildingId=F('roomId__buildingId'))

第二个只是一个应该返回两个结果的测试。 这两个都只返回第一个结果。所以我得到的queryset = Schedule.objects.all().annotate(buildingId=RawSQL("select roomId from api_room where buildingId_id = 1", ())) 是第一个结果的ID,而不是所有匹配结果的列表。

1 个答案:

答案 0 :(得分:0)

这不会像你期待的那样工作,它会为每个buildingId对象只返回一个Schedule。数据库无法以树格式返回数据,这将是必需的。

您可以使用以下方式从Schedule个对象访问每个建筑物

queryset = Schedule.objects.all().prefetch_related(Prefetch('roomId', queryset=Room.objects.all().select_related('buildingId'))

for schedule in queryset:
    rooms = schedule.roomId.objects.all()
    for room in rooms:
        building = room.buildingId

这将只对您的数据库执行2次查询。