Django-Rest框架:派生模型序列化器字段

2024-10-01 04:51:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django Rest框架和Django多态树构建一个类似于树的分层数据库系统。我有两个模型-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 Admin View

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

^{pr2}$

这给了我(仅限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字段(来自于BaseTreeNode模型)关联的description字段? 比如:

... {
                "id": 5,
                "title": "Contact verification",
                "description": "Verified"
                "subcategories": []
              } ...

Tags: nameselfidnodeverbosetitlemodelsdescription
1条回答
网友
1楼 · 发布于 2024-10-01 04:51:36

相应的模型如下:

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")

序列化程序如下:

^{pr2}$

相关问题 更多 >