Python Django DRF在many中访问父序列化程序实例=True

Python Django DRF在many中访问父序列化程序实例=True,python,django,django-rest-framework,Python,Django,Django Rest Framework,Tl;dr:在多=真模式下序列化时,我需要在子1中访问父序列化程序的实例 在我的博客模型中,我有字段tabs=JSONField(存储标签列表,显示在博客中) 我有这样的ModelSerializer: 类BlogShortListSerializer(serializers.ModelSerializer): 制表符=制表符序列化器(只读=真) 类元: 模型=博客 字段=['id'、'name'、'type'、'tabs'] 和TabsSerializer: class选项卡序列化程序(se

Tl;dr:在多=真模式下序列化时,我需要在子1中访问父序列化程序的实例

在我的博客模型中,我有字段tabs=JSONField(存储标签列表,显示在博客中)

我有这样的ModelSerializer:

类BlogShortListSerializer(serializers.ModelSerializer):
制表符=制表符序列化器(只读=真)
类元:
模型=博客
字段=['id'、'name'、'type'、'tabs']
和TabsSerializer:

class选项卡序列化程序(serializers.ListField):
def到_表示(自身、数据):
#获取列表(由基类ListField生成)
res=super().到_表示(数据)
#从父序列化程序获取日志
blog=self.parent.instance
#从请求中获取用户
user=self.context[“请求”]。user
#如果用户不允许看到“人员”选项卡,请在显示之前将其删除。
如果没有,用户是否能够看到人们(博客、用户):
如果res中的“人”:
res.remove(“人员”)
返回res
当我在单个实例上使用BlogShortListSerializer时,一切正常:

返回响应(BlogShortListSerializer(blog).data)
但是如果我在很多物体上使用它,它就不起作用了

return Response(BlogShortListSerializer(blogs, many=True).data)
因为在第二种情况下,
blog=self.parent.instance
并没有将blog对象放入blog变量中,它会放入提供给BlogShortListSerializer构造函数的整个blog列表

我调试了DRF代码,发现在many=True模式下,序列化程序遍历所提供项的列表,并调用child.to_表示法只是属性值,实例不存储在任何位置(它只是循环中使用的一个变量)

因此,我必须在BlogShortListSerializer中使用MethodSerializer,才能访问实例,但我想重用代码,TabsSerializer看起来就像是拆分代码的正确方法,并在其他博客的序列化中使用它,但这是不可能实现的

还是我遗漏了什么


尝试查看自定义ListSerializer以覆盖该循环,以便可以将实例与值一起传递。