当前位置: 首页 > 面试题库 >

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

姬康平
2023-03-14
问题内容

假设我们有以下模型:

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

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


问题答案:

最简单的方法是使用depth参数

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参数来指定用作字段源的属性。我们可以通过使用模型上的related_name选项source来确保teachers属性存在,从而删除参数。Teacherclassroom = models.ForeignKey(Classroom, related_name='teachers')

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



 类似资料:
  • 问题内容: 我的代码有问题。因为我要为页面包括全局字体,所以我下载了.ttf文件。我将其包含在我的主要CSS中,但是我的字体不会改变。 这是我的简单代码: 我不知道我哪里出了错。你能帮我吗?谢谢。 问题答案: 仅为webfont提供.ttf文件不足以支持跨浏览器。目前最好的组合是使用以下组合: 此代码假定您的webfont具有.eot,.woff,.ttf和svg格式。要使所有这些过程自动化,您可

  • 问题内容: 我有一个Rails应用程序,我从Sphinx切换到ElasticSearch并使用gem searchkick。 我有一个教师模型和一个标签模型(通过宝石),其中一个教师可以关联多个标签。在教师模型中,我定义了这样的索引: 名称,简介和简介是教师的属性,但是我想为与该老师相关联的标签的名称建立索引。我怎样才能做到这一点? 现在,它索引对象的名称(关系),我如何索引标签对象内部的属性名称

  • TypeScript1.8现在支持非类型化的JS文件。要启用此特性,只需添加编译器标志--allowJs或将“allowJs”:true添加到tsconfig.json中的compilerOptions中 通过https://blogs.msdn.microsoft.com/typescript/2016/01/28/uncasting-typescript-1-8-beta/ 我正在尝试导入re

  • 当我使用opencsv读取csv文件时,它在字符串末尾遇到\时无法正常工作。它使字符串的"部分,而不是'\',因为我想。我想一定有什么方法可以添加另一个\,让它转义\字符?无需手动编辑csv文件。我找过了,但什么也没找到。 为了澄清我的问题,看起来是这样的: csv文件 我的代码看起来像这样(不是真的,但它显示了我的问题): 我想把它解析成一个String[],每行有4个元素,但是最后一行只解析成

  • 问题内容: 当我使用opencsv读取csv文件时,在字符串末尾遇到“ \”时,它无法正常工作。它使字符串的一部分成为“”,而不是我想要的“ \”。我猜必须使用某种方法来添加另一个“ \”以使其转义为“ \”字符吗?而 无需 手动编辑csv文件。我已搜索但未找到任何内容。 为了澄清我的问题,它看起来像这样: CSV文件 我的代码看起来像这样(不是真的,但是它显示了我的问题): 我希望将此解析为每行

  • 问题内容: 我有一个叫做 School 的模型,它有很多 学生 。 这是我模型中的代码: 我在控制器中使用此代码让所有学生: 并在视图中: 现在,我想按表中的某些字段对 学生 进行排序。我怎样才能做到这一点? 问题答案: 您可以通过几种方法实现这一目标: