django - 为每个嵌套的序列化器获取单独的序列化器响应
问题描述
卡在序列化程序中,我需要基于嵌套序列化程序进行序列化响应。
模型.py:
class Parent(models.Model):
name = models.CharField(max_length=50)
class Child(models.Model):
parent = models.ForeignKey(Parent, related_name='children')
child_name = models.CharField(max_length=80)
序列化器.py
class ChildSerializer(serializers.ModelSerializer):
class Meta:
model = Child
fields = '__all__'
class ParentSerializer(serializers.ModelSerializer):
child = serializers.SerializerMethodField()
def get_child(self, obj):
childs = Child.objects.filter(parent=obj)
return ChildSerializer(childs, many=True).data
class Meta:
model = Parent
fields = '__all__'
我得到如下输出,我得到嵌套的孩子:
{
id : 1,
name : "Parent1",
child: [
0: {id : 1, child_name : "child1"}
1: {id : 2, child_name : "child2"}
]
}
但出于某些业务目的,我需要输出如下所示,其中序列化程序应基于子级。即对于每个孩子应该有单独的父序列化程序。如果它具有相同的 id 和其他字段都没关系。:
{
0:{
id : 1,
name : "Parent1",
child: [
0: {id : 1, child_name : "child1"}
]
}
1:{
id : 1,
name : "Parent1",
child: [
0: {id : 2, child_name : "child2"}
]
}
}
另外请让我知道我是否可以根据子序列化程序进行过滤。即childs
我将传递给父序列化程序并获得每个孩子的响应。
解决方案
尝试如下更改父序列化程序。
class ParentSerializer(serializers.ModelSerializer):
children = ChildSerializer(read_only=True)
def to_representation(self, instance):
child_query = Child.objects.filter(parent=instance)
num_childs = child_query.count()
ret_instance = {}
for idx in range(num_childs):
children = ChildSerializer(child_query[idx:idx + 1], many=True).data
for child in children:
child.pop('parent', None)
temp_dict = {
'id': instance.id,
'name': instance.name,
'child': children
}
ret_instance[idx] = temp_dict
return ret_instance
class Meta:
model = Parent
fields = '__all__'
要更改序列化程序响应的表示,需要使用to_representation()方法。
推荐阅读
- amazon-web-services - Terraform:调用函数“元素”失败:无法从字符串中读取元素
- postgresql - 无法从另一个容器中的 Web 应用程序访问 docker 中的 postgres
- google-play - 如何使用单个 Play 商店帐户在不同的应用内帐户中购买相同的订阅?
- python - 如何从管道将参数传递给python脚本
- c++ - Qt 6.1 QSGTexture 的纹理数据可以动态更改吗?
- javascript - 计算对象数组的中位数
- visual-studio-code - 无法在编辑器中输入数字“1”
- r - 在 R 闪亮中按下浏览按钮后自动呈现“textInput”
- flutter - path_provider getExternalStorageDirectories() 只返回一个目录
- r - ggplot2 R 图表