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

Django REST框架:向ModelSerializer添加其他字段

施锋
2023-03-14
问题内容

我想序列化一个模型,但想包含一个附加字段,该字段要求在要序列化的模型实例上进行一些数据库查找:

class FooSerializer(serializers.ModelSerializer):
  my_field = ... # result of some database queries on the input Foo object
  class Meta:
        model = Foo
        fields = ('id', 'name', 'myfield')

什么是正确的方法?我看到你可以将额外的“上下文”传递给序列化程序,是在上下文字典中传递附加字段的正确答案吗?使用这种方法,获取我需要的字段的逻辑不会与序列化程序定义完全独立,这是理想的,因为每个序列化的实例都需要my_field。在DRF序列化器文档的其他地方,它表示 “额外字段可以对应于模型上的任何属性或可调用的属性”。我在说的是多余的领域吗?我应该在Foo的模型定义中定义一个返回my_field值的函数,并在序列化程序中将my_field连接到该可调用项吗?看起来像什么?

在此先感谢你,如有必要,我们很乐意澄清问题。


问题答案:

我认为SerializerMethodField是你要寻找的:

class FooSerializer(serializers.ModelSerializer):
  my_field = serializers.SerializerMethodField('is_named_bar')

  def is_named_bar(self, foo):
      return foo.name == "bar" 

  class Meta:
    model = Foo
    fields = ('id', 'name', 'my_field')


 类似资料:
  • 我想序列化一个模型,但希望包含一个额外的字段,该字段需要对要序列化的模型实例进行一些数据库查找: 做这件事的正确方法是什么?我看到你可以传递额外的“上下文”到序列化器,正确的答案是在上下文字典中传递额外的字段吗? 使用这种方法,获取所需字段的逻辑将不是序列化程序定义自包含的,这是理想的,因为每个序列化实例都需要。在DRF序列化器文档的其他地方,它说“额外的字段可以对应于模型上的任何属性或可调用的”

  • 问题内容: 索引文件如下: 我想要的是按平台计数和输出统计信息。为了进行计数,我可以将术语聚合作为字段进行计数: 这样,我就可以像预期那样将统计数据作为多个存储桶接收到。 现在,我还能以某种方式添加到这些存储桶中吗(以及用于统计的漂亮输出)?我附带的最好的看起来像: 实际上,它可以工作,并且在每个存储桶中返回非常复杂的结构: 当然,可以从此结构中提取平台的名称和网址(例如),但是是否有更干净,更简

  • 索引文档如下: 我想要的是按平台计数和输出统计信息。对于计数,我可以使用带有的术语聚合作为字段进行计数: 通过这种方式,我以多个bucket的形式接收统计数据,看起来就像预期的那样{key:8,doc\u count:162511}。 现在,我可以以某种方式将和(用于漂亮的统计输出)添加到这些桶中吗?我带来的最好的看起来像: 实际上,它可以工作,并在每个桶中返回非常复杂的结构: 当然,平台的名称和

  • 首先要明确一点的是,没有最好,只有最合适。前端框架并不是所谓 注:本文一些数据收集时间为16-12-31 因为大部分教程都是付费的,所以教程数量的多少在侧面反映了框架的市场需求,如果框架冷门用的人不多,那必然不会有人去为其开发教程。

  • 当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320 我得到的答复是: 而在http://127.0.0.1:8000/api/images/ 答复是: 为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中? 以下是我的看法。派克

  • 在我的ModelViewSet中,我试图排除我的租户字段,以防止用户看到租户id(来自django-simic-Multitenant)。但是,我不能开发通用的ModelSerializer,因为我总是需要在ModelSerializer类中定义模型Meta。我的源代码,工作(非通用)如下。我想实现以下任一选项: > 序列化器的工作原理是拾取实际的类模型,而不需要在序列化器的元类中指定模型 在默认