一尘不染

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

django

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

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连接到该可调用项吗?看起来像什么?

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


阅读 1026

收藏
2020-03-28

共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')
2020-03-28