簡體   English   中英

如何在 Django ORM 中加入兩個表?

[英]How do I join two tables in 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM