django - 使用函数更改 ModelSerializer 字段键
问题描述
我有一个简单的 Django Rest Framework ModelSerializer 用于具有字段“名称”的模型。我想对其进行序列化,因此名称是值,其清理后的名称是以下方式的键:
"results": [
{
"mymodel1" : "My Model 1"
},
{
"mymodel2" : "My Model 2"
}]
我目前有:
class ModelSimpleSerializer(serializers.ModelSerializer):
keyname = serializers.SerializerMethodField('get_model_keyname')
class Meta:
model = myModel
fields = (
'keyname',
)
def get_model_keyname(self,obj):
keyname = obj.name
keyname = keyname .lower()
keyname = keyname .replace(" ", "")
return keyname
返回:
"results": [
{
"keyname" : "mymodel1"
},
{
"keyname" : "mymodel2"
}]
有任何想法吗?
谢谢!
解决方案
尝试这个
class ModelSimpleSerializer(serializers.Serializer):
def to_representation(self, obj):
keyname = obj.name.lower().replace(" ", "")
return {
keyname: obj.name,
}
请注意,这将是只读序列化程序。但它会满足你的要求
objects = myModel.objects.all()
ModelSimpleSerializer(objects.first()).data
# {"mymodel1" : "My Model 1"}
ModelSimpleSerializer(objects, many=True).data
# [{"mymodel1" : "My Model 1"}, {"mymodel2" : "My Model 2"}]
推荐阅读
- amazon-web-services - 在 AWS EMR 中提交 Spark 作业
- json - 聚合相似的对象对字段求和
- javascript - 如何在 react admin v3 中设置时区?
- swift - 为什么不能在 Swift 中从 Facebook Graph API 下载图像?
- command-line - wget 和外部图像的问题
- javascript - 使用 javascript 检测用户的区域设置是否设置为 12 小时或 24 小时时间格式
- ruby-on-rails - 更改表单提交时的 URL 参数
- java - 如何创建可在整个应用程序中访问但同时请求特定的变量?
- laravel - 从 laravel 调用 HTTPS 请求到外部 API
- ruby-on-rails - ActiveAdmin 预编译资产