python - 使用 Django Rest Framework 自动引用嵌套
问题描述
我在 Django 中有这个模型(基于旧数据库):
class NationalTest(models.Model):
unityId = models.IntegerField(primary_key=True)
parentId = models.IntegerField(blank=True)
grade = models.FloatField(blank=True)
该模型存储一个“统一”(我国的一所学校、一个城市、一个地区或一个州)在全国考试中获得的成绩。unityId
是unity的id,grade
是它在测试中的成绩,是parentId
它的上父母的id(即:如果我们的unity是学校,就是学校parentId
所在城市的id;如果是城市,parentId
就是城市所在州的 id 等)。
对于前端的目的,当我获取某个学校的成绩时,我还需要城市、州、地区和整个国家的成绩(所有 5 个级别都可能)。当我获取一个城市的等级时,我还需要州、地区和国家的等级。当我取状态的等级时,只需要等级以上的两个等级。
我认为我可以解决它的最好方法是创建一个基于parentId
. 我知道当我们有来自另一个模型的外键时该怎么做,但是当外键在同一个模型中时我该怎么做(即:它是unityId
)?
我需要这样的东西来获取:
{
unityId: 2393044, // It is a school
parentId: 239, // In this case, it is a city
grade: 7.3,
city: {
unityId: 239
parentId: 23
grade: 8.2,
},
state: {
unityId: 23
parentId: 2
grade: 7.5,
},
region: {
unityId: 2
parentId: 1
grade: 7.9,
},
country: {
unityId: 1
parentId: null
grade: 7.7,
},
}
解决方案
您应该必须使用 SerializerMethodField。
class NationalTestSerializer(serializers.ModelSerializer): parent= serializers.SerializerMethodField() class Meta: model = NationalTest def get_parent(self, obj): # get the information of parent.
您可以将 ForeignKey 与自己的模型一起使用
parentId= models.ForeignKey('self', on_delete=models.CASCADE)
推荐阅读
- android - 迁移到适用于 Android Q 的范围存储
- c# - 有没有办法让通知在被视为横幅后出现在锁定屏幕上?iOS12
- android - Android 8.0+ 深度链接仅在应用程序被杀死时才首先打开启动器活动
- javascript - 使用(变量类型)作为条件是否不正确?es-lint 显示意外的恒定条件
- c# - winCE中如何获取目录中的文件名?(C#)
- flutter - 颤振导航回所选页面
- python - 如何在已部署的 Angular 项目中更新资产数据
- pandas - 加入2个文本文件并在python中创建一个新文件
- flutter - 如何同时实现拖动和点击
- javascript - React - 在组件状态下向数组内的对象添加属性