Django使用get和post来休息框架额外的序列化器字段

时间:2017-02-08 12:19:38

标签: django django-rest-framework

我想序列化一个模型并包含额外的字段。我想使用此序列化程序来获取列表,详细信息和创建视图。在serialializer中,我使用create,update和get_field方法来定制逻辑。

class ExampleSerializer(serializers.ModelSerializer):
    field = serializers.CharField()

    class Meta:
        model = Example
        fields = ("field", ...)

当我添加新对象时,一切都是正确的(我可以验证自定义字段数据),但是当我得到对象时,“字段”在响应中不存在。

编辑:我想在序列化程序类上设置自定义方法来获取字段。这对我来说是更好的逻辑解决方案,然后在模型上设置自定义方法。

为什么会那样?是否存在更好的解决方案(我不想使用SerializerMethodField)?

1 个答案:

答案 0 :(得分:1)

该字段不是模型的一部分,因为它出现了错误。您可以使该字段为write_only = True.Suppose字段为额外字段。

class ExampleSerializer(serializers.ModelSerializer):
   field = serializers.CharField(write_only=true)

   class Meta:
      model = Example
      fields = ("field", ...)

或者您可以将字段交叉池的源值赋予哪个字段。

  1. 我们可以使用该字段名称定义属性方法。您可以在序列化程序中包含该字段,只读取您可以为该

    返回的任何数据
    class Example(model.MOdels):
      @property
      def field(self):
         return #whatever you want to return
    
  2. 您可以使用serilizermethod字段。

     class ExampleSerializer(serializers.ModelSerializer):
         field = serializers.serializerMethod()
    
         class Meta:
            model = Example
            fields = ("field", ...)
          def get_field(self, obj):
              return obj.data