You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django DRF使用serializer输出多接口项仅返回最后一项如何解决

问题根因

该问题由data变量的构造逻辑错误导致:
原代码遍历interfaces列表时,每次循环都直接重新赋值data = [{"interface": i}],新值会完全覆盖上一轮循环的内容,最终data仅保留了列表最后一个接口的字典结构,因此序列化后只会返回最后一项。

修复方法

调整data的构造逻辑,先初始化空列表,再将每个接口的字典结构追加到列表中即可,修改后的完整代码如下:

@api_view(['GET'])
def selected_device(request,pk=None):
    if pk != None:
        devices = Device.objects.filter(pk=pk)
        devicedetail = DeviceDetail.objects.filter(DD2DKEY=pk)
        cursor = connection.cursor()
        tablename= "dev_interface_" + str(pk)
        cursor.execute(f"SELECT interface FROM {tablename} ")
        righttable = cursor.fetchall()
        devserializer = DeviceSerializers(devices, many=True)
        devdserializer = DeviceDetailSerializers(devicedetail, many=True)
        interfaces = []
        for i in righttable:
            interfaces.append(i[0])
        # 调整部分:先初始化空列表,再循环追加数据
        data = []
        for i in interfaces: 
            data.append({"interface": i})
        interserializer = InterfaceSerializers(data, many = True)
        results = {
            "device":devserializer.data,
            "device_details" : devdserializer.data,
            "interface":interserializer.data,
        }
        return Response(results)
额外优化建议

当前代码直接拼接字符串生成表名、执行SQL的写法存在SQL注入风险,如果pk参数是用户可控制的输入,建议增加表名校验逻辑,或者改用Django ORM的安全查询方式,避免恶意注入攻击。

内容的提问来源于stack exchange,提问作者L.Calvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:18:04