python - Django Rest Framework 嵌套序列化器

标签 python django d3.js django-rest-framework

我有这样的模型 -

class Sectors(models.Model):
  sector_mc = models.TextField()

class Insector(models.Model):
  foundation = models.ForeignKey(Sectors)
  name = models.TextField()
  value = models.FloatField(default=0)

我希望我的数据采用如下格式:

                        "name": "cluster",
                        "children": [
                            {"name": "Tester", "value": 3938},
                            {"name": "CommunityStructure", "value": 3812},
                        ]
                    },
                    {
                        "name": "graph",
                        "children": [
                            {"name": "BetweennessCentrality", "value": 34},
                            {"name": "LinkDistance", "value": 5731},
                        ]
                    }

因此“cluster”位于“Sectors”的“sector_mc”中 集群有子节点“Tester”和“CommunityStructure”(这些位于集群扇区_mc 的“Insector”的“名称”和“值”中)

类似地,“graph”位于扇区的“sector_mc”中,并且图具有子“BetweennessCentrality”和“LinkDistance”(这些位于图sector_mc的“Insector”的“名称”和“值”中)

等等。

如何将这些具有相同关系的内容保存在数据库中,以及如何使用 DRF 以这种格式构建它。我尝试使用 DRF 的嵌套关系,但没有达到目的。

我需要 d3 旭日图的数据采用这种格式。如果还有其他解决方法,我也很愿意了解它们。谢谢

最佳答案

您可以创建一个SectorSerializer,其中将包含一个嵌套序列化器InsectorSerializer

由于您使用不同的键进行输出,我们可以使用 source 从字段名称中获取相应的值。

输出中的

name键对应于sector_mc,因此我们使用sector_mc作为其source

输出中的

children 键包含特定 Sectors 实例的所有相关实例。我们可以使用FOO_set作为 children 字段的源。此外,由于将有多个相关实例,因此我们将同时传递 many=True 参数。

class InsectorSerializer(serializers.ModelSerializer):

    class Meta:
        model = Insector
        fields = ('name', 'value')


class SectorSerializer(serializers.ModelSerializer):
    name = serializers.CharField(source='sector_mc') # get value from 'sector_mc' 
    children = InsectorSerializer(many=True, source='insector_set') # get all related instances

    class Meta:
        model = Sectors
        fields = ('name', 'children')

关于python - Django Rest Framework 嵌套序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37812348/

相关文章:

django - Django 正则表达式 url 上的波形符 (~) 符号 (Cookiecutter Django)

python - django更新 View 并传递上下文

django-activity-stream 操作不显示

javascript - D3 圆圈包中单独的鼠标单击圆圈和背景

javascript - 尝试嵌套选择时未定义 D3 数据

r - 如何将数据驱动的 d3JS 图与 Shiny 集成?

python - 如何在 FUSE readdir 调用中返回文件统计信息?

python - 获取列表类型的元素类型

python - 使用 python 客户端从 yaml 创建 Kubernetes CronJob

python - Linux静态路由规则文件格式转换使用Python