比方说,我们有以下模型:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
比方说,而不是让这样每ManyRelatedPrimaryKeyField功能结果:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
有它返回的东西,包括喜欢全相关型号表示方法:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
这可能吗? 如果是这样,怎么样? 这是一个坏主意?
最简单的方法是使用深度参数
class ClassroomSerializer(serializers.ModelSerializer):
class Meta:
model = Classroom
depth = 1
然而,这将只包含着关系,在这种情况下是不太你所需要的,因为老师字段是反向关系的关系。
如果你有更复杂的要求(如包括反向关系,巢某些领域,而不是其他人,或只窝领域的特定子集),你可以窝序列化 ,如...
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher
fields = ('id', 'name', 'tenure')
class ClassroomSerializer(serializers.ModelSerializer):
teachers = TeacherSerializer(source='teacher_set')
class Meta:
model = Classroom
请注意,我们使用的源参数在串行字段指定为现场的源使用的属性。 我们可以放下source
的,而不是确保参数teachers
属性通过使用存在related_name您选择Teacher
的模型,即。 classroom = models.ForeignKey(Classroom, related_name='teachers')
有一点要记住的是,嵌套的序列化目前不支持写入操作。 对于可写的陈述,你应该使用常规平表示,如PK或超链接。
谢谢@TomChristie! 你帮了我很多! 我想更新一点点(因为一个错误,我跑进)
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher
fields = ('id', 'name', 'tenure')
class ClassroomSerializer(serializers.ModelSerializer):
teachers = TeacherSerializer(source='teacher_set', many=True)
class Meta:
model = Classroom
field = ("teachers",)