[英]Serialize the response as nested field in django rest framework
I had been trying to make a nested json instead of flat json.我一直在尝试制作嵌套的 json 而不是平面 json。 What I am getting is,我得到的是,
{
"field1": "value1",
"field2": "value2"
}
And I am trying to make as,我正在努力使,
{
"field1": "value1",
"extra": {
"x1" : "value2",
"comment": "my comment"
}
}
My model is simple,我的模型很简单,
class MyModel(BaseMeta):
field1 = models.CharField(db_column='field1', primary_key=True, max_length=11)
field2 = models.CharField(db_column='field2')
Serializer is序列化程序是
class MyModelSerializer(serializers.Serializer):
class Meta:
model = MyModel
fields = ['field1', 'field2']
The solution is the following,解决方法如下,
class MyModelSerializer(serializers.Serializer):
extra = serializers.SerializerMethodField('get_extra')
class Meta:
model = CowMating
fields = ['field1', 'extra']
def get_extra(self, obj):
return {
'x1': obj.field2,
'comment': 'my comments'
}
But I am wondering if its possible to write another serializer like,但我想知道是否可以编写另一个序列化程序,例如,
class ExtraSerializer(serializers.Serializer):
x1 = serializers.CharField(source='field2')
comment = "my comment"
and the serializer would be in the ModelSerializer
,序列化器将在ModelSerializer
,
class MyModelSerializer(serializers.Serializer):
extra = ExtraSerializer()
class Meta:
model = MyModel
fields = ['field1', 'extra ']
Please give some advice.请给一些建议。 Thanks in advance.提前致谢。
Yes it's possible that you can refer another serializer in another for nested data and also there's django property that you can use.是的,您可以在另一个序列化程序中为嵌套数据引用另一个序列化程序,并且您还可以使用 django 属性。
your way你的方式
class MyModelSerializer(serializers.Serializer):
extra = ExtraSerializer()
class Meta:
model = MyModel
fields = ['field1', 'extra ']
depth = 1 . #<--- Add this
Property财产
models.py
Suppose you have two models MyModel1
and MyModel2
which has Foreignkey relationship with the MyModel1
.假设你有两个型号MyModel1
和MyModel2
具有与外键关系MyModel1
。
class MyModel1(BaseMeta):
field1 = models.CharField(db_column='field1', primary_key=True, max_length=11)
field2 = models.CharField(db_column='field2')
@property
def mymodel2_prop(self, obj):
from appname.serializer import MyModel2Serialzers #you have to implement a simple serializer fro MyModel2 which is imported here.
return MyModel2Serilzers(mymodel2_set.all()).data
So you import the serializer which is optional but a good practice to validate data.因此,您导入序列化程序是可选的,但它是验证数据的好方法。 using reverse relationship you use set
to get the related data in MyModel1
API使用反向关系,您使用set
来获取MyModel1
API 中的相关数据
class MyModel2(BaseMeta):
some_field1 = models.ForeignKey(MyModel1, on_delete=models.CASCADE)
serializers.py
class MyModelSerializer(serializers.Serializer):
class Meta:
model = MyModel
fields = ['field1', 'mymodel2_prop ']
This is to give you an idea, Code is untested这是给你一个想法,代码未经测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.