django - 如何从不同的模型制作自定义序列化器?
问题描述
我有 3 种不同的型号。我需要用这 3 个模型构建一个自定义序列化程序。我尝试使用一些代码,但没有达到我的预期。有结构,但我无法获得我期望的数据
# Serializer This my Serializer 和 ModelOne、ModelTwo、ModelThree 这些是我的模型。
class ModelOneSerializer(serializers.ModelSerializer):
class Meta:
model = ModelOne
fields = ['id', 'obj_1', 'obj_2']
class ModelTwoSerializer(serializers.ModelSerializer):
class Meta:
model = ModelTwo
fields = ['id', 'obj_1', 'obj_2']
class ModelThreeSerializer(WritableNestedModelSerializer):
class Meta:
model = ModelThree
fields = ['id', 'obj_1', 'obj_2']
class CustomSerializer(serializers.Serializer):
model_1 = ModelOneSerializer(many=True)
model_2 = ModelTwoSerializer(many=True)
model_3 = ModelThreeSerializer(many=True)
# 看法
class CustomView(APIView):
def get(self, request, *args, **kwargs):
serializer = CustomSerializer(context={'request': request})
return Response({'response': 'ok', 'result': serializer.data})
# 预期输出
{
"response": "ok",
"result": {
"model_1": [
{
"id":"1",
"obj_1":"test",
"obj_2":"test",
"obj_3":"test"
},
{
"id":"1",
"obj_1":"test",
"obj_2":"test",
"obj_3":"test"
}
],
"model_2": [
{
"id":"1",
"obj_1":"test",
"obj_2":"test",
"obj_3":"test"
}
],
"model_3": [
{
"id":"1",
"obj_1":"test",
"obj_2":"test",
"obj_3":"test"
}
]
}
}
结果可能在model_2和model_3中有多个数据,就像在model_1结构中一样
解决方案
您没有为所有模型序列化程序传递要序列化的内容,因此没有CustomSerializer
任何要序列化的对象。
您可以将模型的查询集传递给CustomSerializer
:
class CustomView(APIView):
def get(self, request, *args, **kwargs):
model_one_qset = ModelOne.objects.all()
model_two_qset = ModelTwo.objects.all()
model_three_qset = ModelThree.objects.all()
qsets_map = {
'model_1': model_one_qset,
'model_2': model_two_qset,
'model_3': model_three_qset,
}
serializer = CustomSerializer(qsets_map, context={'request': request})
return Response({'response': 'ok', 'result': serializer.data})
推荐阅读
- javascript - javascript正则表达式仅从字符串内容中查找带有连字符的数字
- swift - 为什么我的 UIpickerView 现在需要 3 个小时才能完成构建?
- javascript - 我怎么知道何时显示对话框
- azure-cloud-services - 参考现有订阅创建服务
- javascript - 如何为从 javascript 到 Zoho Creator 的文件上传设置正文
- if-statement - 如何转置到“相同”列?
- sql - 是否可以替换 SQL Server Management Studio 2014 中注释中没有的单词?
- powerbi - 如何计划刷新 Web.Contents 数据源?
- html - 如何在angular6中刷新后保留选定的localStorage值列表?
- r - 在一个数据帧中按时间间隔在另一个数据帧中创建中断:模糊连接