我想序列化一个模型,但想要包括一个额外的字段,该字段需要在要序列化的模型实例上执行一些数据库查找:

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

做这件事的正确方式是什么?我看到you can pass in extra "context"是给序列化程序的,在上下文字典中传递附加字段是正确的答案吗?

使用这种方法,获取所需字段的逻辑将不会与序列化程序定义自包含,这是理想的,因 for each 序列化实例都需要my_field.在DRF serializers文档的其他地方,它显示了says个"额外字段可以对应于模型上的任何属性或可调用属性".我说的是"额外领域"吗?

我应该在Foo的模型定义中定义一个返回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')

http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

Django相关问答推荐

查尔而不是瓦尔查尔加盟Django 球场

带有变量键的 Django 模板括号表示法不起作用

情节主题更改问题

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

Django: 无法将我的 comments 关联到特定产品

我如何获得已循环的每个项目的名称?

无法创建超级用户,因为 Django 中的一列(外键)不能为空

如何在 django 的列表中查找所有对象作为对象?

基于每个条目的 Django Queryset 过滤

关于Django中批量保存对象的问题

Django 模型命名约定

在 GoDaddy 上安装 django 站点

如何使用 jQuery 建立 Django 网站

Python / Django 中的 Unicode 与 UTF-8 混淆?

Django中的单表继承

模型中的外键

可以在 github 页面上托管 django 站点吗?

如何在 Django/Python 中减go 两个日期?

Django admin:使字段在添加中可编辑但不可编辑

如何在 django 模板中呈现有序字典?