提问者:小点点

Django REST框架:向ModelSerializer添加附加字段


我想序列化一个模型,但希望包含一个额外的字段,该字段需要对要序列化的模型实例进行一些数据库查找:

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挂接到那个可调用的函数?那看起来像什么?

如果有必要,乐意澄清问题。


共1个答案

匿名用户

我认为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