I call serializer:
serializer = MySerializer(qs, many=True)
when qs
- QuerySets for myModel
from rest_framework.serializers import Serializer
class MySerializer(Serializer):
param1 = CharField()
param2 = IntegerField(required=False)
custom_fields = JSONField()
class Meta:
pass
Next, I just use the custom_fields
and get the values manually.
Is it possible at this stage to get the fields inside this custom_fields
and return them through the serializer?
custom_fields
contains:
{
'custom_value1': 3,
'custom_value2': 5
}
updated
: What i want to get after serializer:
{
'param1': 'value1',
'param2': 'value2',
'custom_value1': 3,
'custom_value2': 5
}
答案 0 :(得分:0)
我担心我完全理解你的问题...你问你可以获得自定义字段的数据吗?
然后回答是
如果您只是使用MySerializer
向APIView调用GET请求,则可以从模型中获取所有数据。
如果您想从模型中获取数据,只需使用ModelSerializer
即可。 (http://www.django-rest-framework.org/api-guide/serializers/#modelserializer)。 ModelSerializer
更容易,但您也可以使用自己的序列化程序。
现在我遇到了类似的情况,我可以得到所有额外的数据(和你一样,是json对象)
我附上了我的序列化程序并重新开始。我希望它对你有所帮助。
我的序列号(extra
字段为JsonField
)
class JobUserSerializer(serializers.ModelSerializer):
class Meta:
model = JobUser
fields = (
"email",
"is_active",
"is_staff",
"id",
"extra",
)
read_only_fields = (
"id",
)
我的回复(对视图集的GET请求。您可以看到额外的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"
},
小心使用此方法:你的json字段应该有那个键。如果您的某个序列化模型没有密钥,则会引发
NoneType TypeError
。或者您可以在try/except
方法中使用get_*
。
希望有所帮助!