我有一个类和序列化器,如下所示:
class MyProperties(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)
value = models.CharField(max_length=100, null=False, blank=False)
created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
class MyPropertiesSerializer(serializers.ModelSerializer):
class Meta:
model = MyProperties
fields = ('name', 'value')
它只是一个具有键/值对的属性表(对于此SO问题简化)。
我想序列化此模型,而在输出中包含字段名称。
假设我的数据库表中有两行:
| name | value |
|--------|:--------:|
| width | 7 feet |
| height | 10 feet |
我想要的输出如下:
[
{"width":"7 feet"},
{"height": "10 feet"}
}
相反,使用我在引用的页面和我发布的示例序列化程序中看到的示例,我得到这样的结果:
[
{
"name": "width",
"value": "7 feet"
},
{
"name": "height",
"value": "10 feet"
}
]
如何创建一个能够提供所需输出格式的串行器?
答案 0 :(得分:2)
<强>更新强>
请参阅上面的汤姆克里斯蒂的评论。他是DRF的作者,他的建议比这更好。
您可以使用custom Renderer并在渲染之前操纵输出数据。像这样:
class CustomRenderer(renderers.JSONRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
result = {}
for item in data:
result[item['name']] = item['value']
data = result
return super(CustomRenderer, self).render(data, accepted_media_type, renderer_context)
并在您的视图中使用它:
class YourView(generics.ListAPIView):
renderer_classes = (CustomRenderer, renderers.BrowsableAPIRenderer)