gpt4 book ai didi

python - 如何使用 Django Rest Framework 包含相关模型字段?

转载 作者:IT老高 更新时间:2023-10-28 12:31:19 25 4
gpt4 key购买 nike

假设我们有以下模型:

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
},
]
},

这可能吗?如果是这样,怎么做?这是个坏主意吗?

最佳答案

最简单的方法是使用 the depth argument

class ClassroomSerializer(serializers.ModelSerializer):
class Meta:
model = Classroom
depth = 1

但是,这将只包括正向关系的关系,在这种情况下,这并不是您所需要的,因为教师字段是反向关系。

如果您有更复杂的需求(例如,包含反向关系、嵌套某些字段但不嵌套其他字段或仅嵌套特定的字段子集),您可以 nest serializers ,例如...

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

请注意,我们使用序列化器字段上的源参数来指定要用作字段源的属性。我们可以通过使用 related_name 确保 teachers 属性存在来删除 source 参数。 Teacher 模型上的选项,即。 classroom = models.ForeignKey(Classroom,related_name='teachers')

要记住的一件事是嵌套序列化程序目前不支持写入操作。对于可写表示,您应该使用常规的平面表示,例如 pk 或超链接。

关于python - 如何使用 Django Rest Framework 包含相关模型字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14573102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com