嵌套字段与Django REST框架进行序列化 [英] Nesting fields in serialization with Django REST framework
本文介绍了嵌套字段与Django REST框架进行序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
鉴于我有一个这样的模型:
class Case(models.Model):
打开= models.DateTimeField(auto_now_add = True)
client_first_name = models.CharField(max_length = 50)
client_last_name = models.CharField(max_length = 50)
我想分组客户端_ *
字段,以便序列化的JSON将如下所示: p>
{
open:2014-10-05T19:30:48.667Z,
:{
first_name:John,
last_name:Doe
}
}
以下我尝试过,但不起作用,因为客户端
不是一个实际的字段:
class ClientSerializer(serializers.ModelSerializer):
/ pre>
class Meta:
model = Case
fields =('client_first_name','client_last_name')
class CaseSerializer(serializers.ModelSerializer):
client = ClientSerializer()
class Meta:
model = Case
fields =('opened','client')
除了完全手动序列化,我有什么选择?我不喜欢为
客户端
制作一个单独的模型,因为这个数据真的属于Case
。只读不够好。解决方案你可以这样尝试:
class CaseSerializer(serializers.ModelSerializer):
client = serializers.SerializerMethodField('client')
class Meta:
model = case
fields =('opened','client')
def client(self,obj):
client_fields = {}
client_fields ['first_name '] = obj.client_first_name
client_fields ['last_name'] = obj.client_last_name
return client_fields
Given that I have a model like this:
class Case(models.Model): opened = models.DateTimeField(auto_now_add=True) client_first_name = models.CharField(max_length=50) client_last_name = models.CharField(max_length=50)
I would like to group the
client_*
fields, so that the serialized JSON would look like this:{ "opened": "2014-10-05T19:30:48.667Z", "client": { "first_name": "John", "last_name": "Doe" } }
The following I tried, but doesn't work because
client
is not an actual field:class ClientSerializer(serializers.ModelSerializer): class Meta: model = Case fields = ('client_first_name', 'client_last_name') class CaseSerializer(serializers.ModelSerializer): client = ClientSerializer() class Meta: model = Case fields = ('opened', 'client')
What options do I have except for completely manual serialization? I prefer not to make a separate model for
Client
because this data really belongs inCase
. Read-only is not good enough.解决方案You can try like this:
class CaseSerializer(serializers.ModelSerializer): client = serializers.SerializerMethodField('client') class Meta: model = Case fields = ('opened', 'client') def client(self, obj): client_fields = {} client_fields['first_name'] = obj.client_first_name client_fields['last_name'] = obj.client_last_name return client_fields
这篇关于嵌套字段与Django REST框架进行序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文