我有这样的模型 -
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/