2016-05-02 8 views
0

ScheduleというモデルにManyToManyField、roomIdというモデルがあります。これは、ForeignKey,buildingIdを持つRoomモデルにリンクしています。Django Querysetの注釈は1つの結果しか返しません

私のクエリセットでは、それぞれroomIdに対してbuildingIdのリストが必要です。

私が試した何

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",())) 

秒1は、2つの結果を返すべき単なるテストです。 これらの両方は、最初の結果のみを返します。だから私が得たbuildingIdは、すべての一致する結果のリストではなく、最初の結果のIDです。

答えて

0

期待通りに動作しません。Scheduleオブジェクトごとに1つだけbuildingIdが返されます。データベースはここで必要となるツリー形式のデータを返すことはできません。

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クエリを実行します:あなたは何ができるか

Scheduleオブジェクト使用してから各建物にアクセスすることです。

+0

これはうまくいくようですが、 'queryset'に' building'プロパティを追加するにはどうしたらいいですか?それは私の 'filter_class'と' serializer_class'でも使えるはずです。 –

関連する問題