python - 尝试在嵌套序列化程序中创建多个对象
问题描述
我有以下型号:
class Grade(models.Model):
grade = models.CharField(max_length=255, unique=True)
class Student(models.Model):
class Meta:
unique_together = ("rollno", "grade")
name = models.CharField(max_length=255)
grade = models.ForeignKey(Grade,related_name='StudentList', on_delete=models.CASCADE)
rollno = models.BigIntegerField(unique = True)
class GradeTotal(models.Model):
grade = models.ForeignKey(Grade, related_name='GradeMarks', on_delete=models.CASCADE)
average = models.IntegerField()
total = models.IntegerField()
class StudentTotal(models.Model):
rollno = models.ForeignKey(Student, related_name='StudentMarks', on_delete=models.CASCADE)
gradeno = models.ForeignKey(GradeTotal, related_name='Fromgrade', on_delete=models.CASCADE)
marks = models.IntegerField()
我正在使用模型Grade
来创建GradeTotal
,然后StudentTotal
. 只有当外键和被用于进程的瞬间相同时,才会StudentTotal
创建对象。grade
GradeTotal
Student
Grade
为此,我有以下序列化程序:
class StudentDataSerializer(serializers.ModelSerializer):
rollno = serializers.CharField()
class Meta:
model =StudentTotal
fields = ('marks', 'rollno' )
class GradeSerializer(serializers.ModelSerializer):
Fromgrade = StudentDataSerializer(many=True)
class Meta:
model = GradeTotal
fields = ('average', 'total', 'Fromgrade', )
class MultipleGradeSerializer(serializers.ModelSerializer):
GradeMarks = GradeSerializer(many=True)
grade = serializers.CharField()
class Meta:
model = Grade
fields = ("grade", "GradeMarks")
def update(self, instance, validated_data):
g_data = validated_data.pop('GradeMarks')
for datas in g_data:
a1 = datas["average"]
t1 = datas["total"]
g1 = GradeTotal.objects.create(grade=instance, average=a1, total=t1)
data2 = datas.pop('Fromgrade')
for data in data2:
e1 = data["rollno"]
r1 = Student.objects.get(rollno=data["rollno"])
if s1.grade == instance:
StudentTotal.create(gradeno = g1, rollno = r1, marks =data["marks"])
return instance
这是我能想到的最好方法,但使用以下 JSON 有效负载:
{
"grade": "nine",
"GradeMarks": [
{
"average": 10,
"total": 5,
"Fromgrade": [
{
"marks": 30,
"rollno": "N1 "
}
]
}
]
}
我收到以下错误:Student matching query does not exist
但我可以rollno
使用 django admin 看到带有 N1 的对象。我不确定为什么会这样。因此我不能创建一个对象,StudentTotal
但可以创建GradeTotal
.
在我看来,我将Grade
其用作模型和MultipleGradeSerializer
序列化程序。任何帮助将不胜感激。
附加信息 如果我执行以下调试
r1 = Student.objects.get(rollno="N1")
,我没有收到此错误,不知道为什么,但我收到以下错误:
type object 'StudentTotal' has no attribute 'create'.
我已经在第二期看到了这一点,我的观点已经有了mixins.CreateModelMixin
。此外,它创建了对象GradeTotal
任何人都可以清除这两个点吗?
解决方案
这一行:
StudentTotal.create(gradeno = g1, rollno = r1, marks =data["marks"])
应该:
StudentTotal.objects.create(gradeno = g1, rollno = r1, marks =data["marks"])
推荐阅读
- asp.net-core - 授权策略多次评估
- c# - 将 AttributeData 转换为已知的属性类型 Roslyn
- collision - 圆碰撞解决 - 静态碰撞
- python - torch.cat的逆向操作
- javascript - 为什么在 Chart.js 中放置两个带有时间笛卡尔轴的数据集会导致两个 Y 轴刻度集?
- python - Django,从主题中获取所有帖子
- python - “从烧瓶导入烧瓶”中的语法错误
- redis - 带有 TYPE 选项的 SCAN 命令与 Lua 脚本之间的时间复杂度差异
- javascript - Django - Chart.js 不返回任何内容
- curl - 带有多个参数的 JAX RS 和 application/x-www-form-urlencoded