当前位置:  开发笔记 > 编程语言 > 正文

Django rest框架代表flatten嵌套对象

如何解决《Djangorest框架代表flatten嵌套对象》经验,为你挑选了1个好方法。

我有一个父对象和一对一相关的子模型,我想在父表示(read only)中渲染子平面的字段.目前,我已经通过自定义to_representation实现实现了这一点,但这似乎非常复杂,我想知道是否有更简单的方法来实现这一点.

由于我的相关模型是通过属性连接的,因此更加复杂.

所以这是具体的例子:默认情况下,相关对象将呈现为:

{
  parent_name:'Bob', 
  child:{
    name:'Alice'
  }
}

这就是我想要的,目前得到我的to_representation:

{
  parent_name:'Bob',       
  child_name:'Alice'
}

我的模型看起来像这样:

class ChildModel(models.Model):
    name = models.CharField(max_length=100, null=True)

class ParentModel(models.Model):
    name = models.CharField(max_length=100, null=True)
    _child = models.ForeignKey('ChildModel', null=True)

    @property
    def child(self):
        return self._most_recent_status

    @name.setter
    def child(self, value):
        self._child = value

这是我的序列化器:

class FlatChildField(serializers.RelatedField):
    def to_representation(self, value):
        return value.name


class FlatParentSerializer(serializers.ModelSerializer):    
    parent_name = serializers.CharField(source='name', read_only=True)
    child_name = FlatChildField(source='_child', read_only=True)

    class Meta:
         model = Parent
         fields = ('name', 'child_name')

对于更简单的解决方案来获得相关模型的平面表示,我将不胜感激.

为了完整起见,我很想知道是否有一个更简单的"正常"相关模型解决方案(即不是属性模型字段).我正在寻找相当于django模型的查询语法related_model__field,但我找不到.django休息框架是否存在?

非常感谢



1> Rex Salisbur..:

最简单的方法是使用源:

class FlatParentSerializer(serializers.ModelSerializer):    
    parent_name = serializers.CharField(source='name', read_only=True)
    child_name =  serializers.CharField(source='_child.name', read_only=True)

    class Meta:
        model = Parent
        fields = ('name', 'child_name')

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有