Django Rest Framework:派生模型序列化器字段

阿卡什·阿迪卡卡里

我正在使用Django Rest Framework和django-polymorphic-tree构建类似树的分层数据库系统。我有两个模型-BaseTreeNode和DescriptionNode(后一个模型是从BaseTreeNode派生的)。具体来说,这是我的models.py

class BaseTreeNode(PolymorphicMPTTModel):
    parent = PolymorphicTreeForeignKey('self', blank=True, null=True, related_name='children', verbose_name=_('parent'))
    title = models.CharField(_("Title"), max_length=200)

    def __str__(self):
        return "{}>{}".format(self.parent, self.title)

    class Meta(PolymorphicMPTTModel.Meta):
        verbose_name = _("Tree node")
        verbose_name_plural = _("Tree nodes")


# Derived model for the tree node:

class DescriptionNode(BaseTreeNode):
    description = models.CharField(_("Description"), max_length=200)

    class Meta:
        verbose_name = _("Description node")
        verbose_name_plural = _("Description nodes")

因此,每个title字段(属于BaseTreeNode)都有一个关联的description字段(属于DescriptionNode)。

Django管理员视图

现在,我想要的只是一个JSON,该JSON返回整个树的嵌套表示形式。现在,我只定义了一个带有递归字段的简单序列化程序。我的serializers.py

from rest_framework_recursive.fields import RecursiveField

class DescriptionNodeSerializer(serializers.ModelSerializer):
    class Meta:
        model = DescriptionNode
        fields = ('description',)

class BaseTreeNodeSerializer(serializers.ModelSerializer):
    subcategories = serializers.ListSerializer(source="children",child=RecursiveField())  
    class Meta:
        model = BaseTreeNode
        fields = ('id', 'title', 'subcategories')

这给了我(仅适用于BaseTreeNodeSerializer):

[
  {
    "id": 1,
    "title": "Apple",
    "subcategories": [
      {
        "id": 2,
        "title": "Contact Person",
        "subcategories": []
      },
      {
        "id": 3,
        "title": "Sales Stage",
        "subcategories": [
          {
            "id": 4,
            "title": "Suspecting",
            "subcategories": [
              {
                "id": 5,
                "title": "Contact verification",
                "subcategories": []
              }
            ]
          },
          {
            "id": 6,
            "title": "Prospecting",
            "subcategories": [
              {
                "id": 7,
                "title": "Client Detail",
                "subcategories": []
              }
            ]
          }
        ]
      },
      {
        "id": 9,
        "title": "Medium",
        "subcategories": [
          {
            "id": 10,
            "title": "Status",
            "subcategories": []
          }
        ]
      },
      {
        "id": 13,
        "title": "Remainder",
        "subcategories": []
      }
    ]
  }
]

我的问题是,如何在层次结构description中包括与每个title字段(来自BaseTreeNode模型)关联字段(来自派生模型)就像是:

... {
                "id": 5,
                "title": "Contact verification",
                "description": "Verified"
                "subcategories": []
              } ...
毛利克·帕特尔

对应模型如下:

class DescriptionNode(BaseTreeNode):
    basetreenode = models.OneToOneField(BaseTreeNode, related_name="base_tree")
    description = models.CharField(_("Description"), max_length=200)

    class Meta:
        verbose_name = _("Description node")
        verbose_name_plural = _("Description nodes")

序列化器如下:

from rest_framework_recursive.fields import RecursiveField

class BaseTreeNodeSerializer(serializers.ModelSerializer):
    description = serializers.SerializerMethodField()
    subcategories = serializers.ListSerializer(source="children",child=RecursiveField())

    class Meta:
        model = BaseTreeNode
        fields = ('id', 'title', 'description', 'subcategories')

    def get_description(self, obj):
        return obj.base_tree.description #base_tree is related name of basetreenode field

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

django-rest-framework如何使模型序列化器字段必填

无法在Django Rest Framework序列化器的validated_data中获取非模型字段

Django Rest Framework Choices字段序列化器

Django REST Framework序列化器字段必填= false

不同的字段类型序列化器 - Django Rest Framework

从Django Rest Framework序列化器中排除字段

Django Rest Framework-筛选序列化器字段

序列化器上的Django Rest Framework条件字段

Django Rest Framework序列化器-返回相关字段

嵌套序列化器字段 Django Rest Framework

Django rest 框架 - 模型序列化器不会序列化所有字段

Django Rest Framework-仅反序列化的序列化器字段

模型字段(在django中)和序列化器字段(在django rest框架中)之间的区别

Django Rest Framework模型序列化器:将所有字段设置为只读,除了一个

Django Rest Framework-何时使用序列化器类与模型序列化器类的具体示例

嵌套关系序列化程序中的Django Rest Framework模型ID字段

Django Rest Framework-在序列化程序中获取相关模型字段

Django Rest Framework-在序列化程序中获取相关模型字段

Django REST Framework-无法通过序列化程序更新模型的字段

如何使用与 Django Rest Framework 中的中间模型的多对多关系序列化附加字段?

Django REST框架:在序列化器中获取相关模型的字段

在Django Rest Framework中序列化相关模型

Django / Django Rest Framework-如何允许模型序列化程序将模型的外键字段设置为null?

django-rest-framework 1个模型的多个序列化器?

Django Rest Framework 同一个模型的两个序列化器

Django Rest Framework-序列化器未保存具有ImageField的模型

如何在序列化器/视图Django REST Framework中合并多个模型?

如何为Django REST Framework正确定义模型/序列化器?

Django Rest Framework如何通过序列化器删除模型