我正在使用 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)。
现在,我想要的只是一个返回整个树的嵌套表示的 JSON。目前,我只定义了一个带有递归字段的简单序列化程序。我的序列化程序.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": []
} ...