如何在 Django ORM 中加入两个表?

我是 Django 的初学者,我知道已经有人问过这个问题,但是我已经尝试了以前答案中的所有可能的解决方案,但仍然无效。我无法弄清楚我做错了什么。

问题是我的视图当前返回 Grade 表的所有字段,但我需要它通过连接两个表来返回所有这些字段以及 Student 表中的“名称”字段。

我读到只要我使用 ForeignKey,Django 就应该自动执行它,但它实际上不起作用。

我究竟做错了什么?如果这是一个菜鸟问题并且解决方案真的很明显,我很抱歉,我仍在努力学习 Django 的工作原理。

应用程序/模型.py

class Student(models.Model):
   id = models.IntegerField(primary_key=True, default=0)
   name = models.CharField(max_length=50)

class Grade(models.Model):
   subject = models.CharField(max_length=50)
   grade = models.IntegerField(default=0)
   student = models.ForeignKey(Student, on_delete=models.CASCADE)

应用程序/serializers.py

class StudentSerializer(serializers.ModelSerializer):
   class Meta:
      model = Student
      fields = ('id', 'name')

class GradeSerializer(serializers.ModelSerializer):
   class Meta:
      model = Grade
      fields = ('subject', 'grade', 'student')

应用程序/视图.py

class StudentView(viewsets.ModelViewSet):
   serializer_class = StudentSerializer
   queryset = Student.objects.all()

class GradeView(viewsets.ModelViewSet):
   serializer_class = GradeSerializer
   queryset = Grade.objects.all().select_related("student")
   
   filterset_fields = ('student')
威廉·范·翁塞姆

对于学生,您可以使用 `StudentsSerializer,例如:

class GradeSerializer(serializers.ModelSerializer):
    student = StudentSerializer()
    
    class Meta:
        model = Grade
        fields = ('subject', 'grade', 'student')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章