我如何加入 Django ORM 中的两个表?

How do I join two tables in Django ORM?

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

目前我的观点是 return 成绩 table 的所有字段,但我需要 return 所有这些字段加上“名称”字段在学生 table 中,加入两个 tables.

我读到 Django 应该会自动执行,只要我使用 ForeignKey,我确实这样做了,但它实际上不起作用。

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

app/models.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)

app/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')

app/views.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):
    <b>student = StudentSerializer()</b>
    
    class Meta:
        model = Grade
        fields = ('subject', 'grade', 'student')