我有一个名为Schedule
的模型,它有一个ManyToManyField,roomId
。这会链接到Room
模型,该模型具有重要的ForeignKey
,buildingId
。
对于我的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,而不是所有匹配结果的列表。
答案 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次查询。