如何在Django Rest Framework Serializer方法字段中保存要重用的对象?

时间:2017-12-05 15:58:28

标签: django django-rest-framework

情况如下:

  • 我的序列化程序中的2个字段使用Serializer Method Field函数来获取各自的内容。
  • 在每个字段中,我调用相同的,完全函数来生成内容。

有点像这样:

class ProductSerializer(serializers.ModelSerializer):
    field_1 = serializers.SerializerMethodField()
    def get_field_1(self, obj):
        content = generate_content(obj)
        return content.field_1

    field_2 = serializers.SerializerMethodField()
    def get_field_2(self, obj):
        content = generate_content(obj)
        return content.field_2

正如您所看到的,这两个方法都使用相同的参数调用相同的函数,因此获得完全相同的结果。 generate_content 函数非常大,所以我觉得最好能保存一次内容,然后用它来生成两个字段。我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

当调用generate_content时,您可以简单地将生成的内容放在变量中,检查该变量是否存在:

class ProductSerializer(serializers.ModelSerializer):
    def __init__(self, *args, **kwargs):
        super(ProductSerializer, self).__init__(*args, **kwargs)
        self.generated_content = None

    def generate_content(self, obj):
       if self.genretated_content:
           return self.genretated_content
       self.genretated_conten = 1 # gernerate here
       return self.genretated_content

    field_1 = serializers.SerializerMethodField()
    def get_field_1(self, obj):
        content = generate_content(obj)
        return content.field_1

    field_2 = serializers.SerializerMethodField()
    def get_field_2(self, obj):
        content = generate_content(obj)
        return content.field_2