gpt4 book ai didi

json - Django:序列化器自动解析json字段并添加到公共(public)字段

转载 作者:行者123 更新时间:2023-12-04 18:31:51 25 4
gpt4 key购买 nike

我调用序列化器:

serializer = MySerializer(qs, many=True)qs - myModel 的查询集

from rest_framework.serializers import Serializer
class MySerializer(Serializer):

param1 = CharField()
param2 = IntegerField(required=False)
custom_fields = JSONField()

class Meta:
pass

接下来,我只使用 custom_fields 并手动获取值。是否可以在此阶段获取此 custom_fields 中的字段并通过序列化程序返回它们?

custom_fields 包含:

{
'custom_value1': 3,
'custom_value2': 5
}

已更新:我想在序列化器之后得到什么:

{
'param1': 'value1',
'param2': 'value2',
'custom_value1': 3,
'custom_value2': 5
}

最佳答案

恐怕我完全理解你的问题......你问你可以获取自定义字段的数据吗?

那么答案是

如果您只是使用 MySerializer 向 APIView 调用 GET 请求,您可以从您的模型中获取所有数据。

如果您想从您的模型中获取数据,您只需使用 ModelSerializer。 (http://www.django-rest-framework.org/api-guide/serializers/#modelserializer)。 ModelSerializer 更简单,但您也可以使用自己的序列化程序。

现在我遇到了类似的情况,我可以得到我所有的额外数据(和你一样,它是json对象)

我附上我的序列化程序并做出响应。我希望它能帮助你。

我的 serialzier(extra 字段是 JsonField)

class JobUserSerializer(serializers.ModelSerializer):
class Meta:
model = JobUser
fields = (
"email",
"is_active",
"is_staff",
"id",
"extra",
)
read_only_fields = (
"id",
)

我的回复(GET 请求到 View 集。您可以看到额外的 json 数据)

{
"email": "test5@test.com",
"is_active": true,
"is_staff": false,
"id": 13,
"extra": {
"last_name": "kim",
"first_name": "seul",
"gcf_spouses_name": "test",
"gcf_spouses_position": "test"
}
},

更新

我认为你可以使用 get_* 方法并使用它。

这是我的示例代码

class JobUserSerializer(serializers.ModelSerializer):
first_name_from_extra = serializers.SerializerMethodField()

class Meta:
model = JobUser
fields = (
"email",
"is_active",
"is_staff",
"id",
# "extra",
"first_name_from_extra"
)
read_only_fields = (
"id",
)

def get_first_name_from_extra(self, obj):
try:
return obj.extra['first_name']
except TypeError:
return ""

然后你可以直接访问“first_name”(我额外的json字段的键)

我的回复

{
"email": "test5@test.com",
"is_active": true,
"is_staff": false,
"id": 13,
"first_name_from_extra": "seul"
},

Be careful using this method: your json field SHOULD have that key. If one of your serializing model don't have the key, it raises NoneType TypeError. Or you can use try/except in get_* method.

希望有所帮助!

关于json - Django:序列化器自动解析json字段并添加到公共(public)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48202838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com