Как переписать метод get в универсальном RetrieveAPIView в django rest framework для фильтрации результатов - PullRequest
0 голосов
/ 12 июня 2019

У меня есть 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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...