我如何加入 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')
我是 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')