get-queryset不适用于drf RetrieveUpdatedStroyaPivi

2024-05-13 19:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对retrieveupdatedestoroyapieview中的原始sql查询使用get_queryset函数。使用ListCreateAPIView()可以正常工作。我是drf新手。如果有什么不对劲的地方,请解释一下。在

视图.py

class SubnetGatewayDevice(generics.ListCreateAPIView):

    serializer_class = SubnetDeviceSerializer

    def get_queryset(self):
        sql_query = " select sd.hostname,sd.ma_number,sd.datacenter_id, ssd.ip, ssp.subnet_id,  " \
                    " sd.id, ssd.id, ssp.id  from subnets_device sd" \
                    " inner join subnets_subnetdevice as ssd on  sd.id = ssd.device_id" \
                    " inner join subnets_subnetphysical as ssp on ssd.subnet_physical_id = ssp.id"
        return list(Device.objects.raw(sql_query))


    def perform_create(self, serializer):
        serializer.save(data=self.request.data)


class SubnetGatewayDeviceDetail(generics.RetrieveUpdateDestroyAPIView):
    # parser_classes = (JSONParser,)

    serializer_class = SubnetDeviceSerializer

    def get_queryset(self):
        device_id = "5"
        sql_query = " select sd.hostname as hostname,sd.ma_number,sd.datacenter_id, ssd.ip, ssp.subnet_id,  " \
                    " sd.id, ssd.id, ssp.id  from subnets_device sd" \
                    " inner join subnets_subnetdevice as ssd on  sd.id = ssd.device_id" \
                    " inner join subnets_subnetphysical as ssp on ssd.subnet_physical_id = ssp.id " \
                    " where sd.id = "+device_id
        return  Device.objects.raw(sql_query)



    # def perform_create(self, serializer):
    #     serializer.save(data=self.request.data)

序列化程序.py

^{pr2}$

Tags: selfidsqldevicedefassdquery
1条回答
网友
1楼 · 发布于 2024-05-13 19:32:29

如果需要,您可能需要重写get_object()方法。在

RetrieveUpdateDestroyAPIView对单个实例执行操作。你可以试着评估一下,你真正需要实现的是什么,以及怎样才能做得更恰当。在

相关问题 更多 >