2017-06-05 36 views
0

因此,我知道ModelSerializer支持基於當前對象中外鍵的嵌套模型對象。但是,我想知道如何做一個交叉連接模型與特定的領域等於另一個對象?Django Rest-Framework:如何在ModelSerializer中交叉對象

class classroom(models.Model): 
    id = models.AutoField(primary_key = True, editable = False) 

class student(models.Model): 
    id = models.AutoField(primary_key = True, editable = False) 
    classroom = models.ForeignKey(classroom, on_delete=models.CASCADE) 

現在,我願做一個ModelSerializer與課堂模式。我想歸檔的想法是返回student.objects.filter(classroom = self.id) [self is classrom]

我怎樣才能從學生獲得數據? (教室中沒有外鍵定位學生)

class classroomSerializer(ModelSerializer): 
# students = ?? 
class Meta: 
    model = classroom 
    fields = [ 
     'id', 
     'students', 
    ] 

回答

2

您可以爲您的學生模型定義另一個序列化程序,並在教室序列化程序中引用它。

class classroomSerializer(ModelSerializer): 
students = studentserializer(many=True) 
class Meta: 
    model = classroom 
    fields = [ 
     'id', 
     'students' 
    ] 

而在你的學生模型

class student(models.Model): 
    id = models.AutoField(primary_key = True, editable = False) 
    classroom = models.ForeignKey(classroom, on_delete=models.CASCADE, related_name='students') 
+0

添加related_name但我不能告訴應當用於在數據庫中的對象匹配的字段。 – DrKNa

+0

我修改了我的答案..試着指定一個related_name來控制你的逆向關係 –

+0

看起來像是有效的,但我仍然在解決這個問題。我試圖按照http://gregblogs.com/tlt-how-to-retrieve-the-fields-of-a-related-model-from-a-django-rest-framework-endpoint/,但有些不對。我可以問一下,related_name必須與ModelSerializer中聲明的字段名稱相同嗎? – DrKNa

相關問題