У меня есть API, который может перечислить несколько зданий.Каждое здание принадлежит нескольким строительным группам, и каждая строительная группа содержит несколько зданий.
Я хочу показать отдельные поля одной группы зданий.Более конкретно, я хочу показать все здания одной группы зданий в моем RetrieveAPIView.
Я могу перечислить один экземпляр BuildingGroup, используя общее представление следующим образом:
class BuildingGroupRetrieveAPIView(RetrieveAPIView):
serializer_class = BuildingGroupSerializer
queryset = BuildingGroup.buildings.all()
Я предполагаю, что я могу перезаписать метод get, чтобы отобразить только одно поле этого извлеченного объекта.В частности, я хочу отобразить все объекты, которые находятся в моем отношении многих ко многим.Или, лучше сказать, я хочу получить все полные данные в пределах моего отношения m2m.
Вот мои модели:
class Building(models.Model):
name = models.CharField(max_length=120, null=True, blank=True)
def __str__(self):
return self.name
class BuildingGroup(models.Model):
description = models.CharField(max_length=500, null=True, blank=True)
buildings = models.ManyToManyField(Building, default=None, blank=True)
Я попробовал это безуспешно:
def get(self):
building_group = BuildingGroup.objects.get(id='id')
qs = building_group.buildings.all()
return qs
мой сериализатор
class BuildingGroupSerializer(serializers.ModelSerializer):
class Meta:
model = BuildingGroup
fields = (
'description',
.....
)
Я могу прикрепитьскриншот, чтобы быть более четким.
Любая помощь высоко ценится.Заранее спасибо
Here is my full view:
class BuildingGroupAPIView(ListAPIView):
permission_classes = [permissions.IsAdminUser]
authentication_classes = [SessionAuthentication]
serializer_class = BuildingGroupSerializer
passed_id = None
def get_queryset(self):
qs = BuildingGroup.objects.all()
query = self.request.GET.get('q')
if query is not None:
qs = qs.filter(name=query)
return qs
class BuildingGroupRetrieveAPIView(RetrieveAPIView):
serializer_class = BuildingGroupSerializer
queryset = BuildingGroup.buildings.all()
def get(self):
building_group = BuildingGroup.objects.get(id='id')
qs = building_group.buildings.all()
return qs