2017-06-05 15 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

相关问题