-->

如何改写获得通用RetrieveAPIView方法Django的REST框架来筛选结果(How to

2019-10-29 12:43发布

我有一个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

文章来源: How to overwrite get method in generic RetrieveAPIView in django rest framework to filter the results