情况如下:
有点像这样:
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 函数非常大,所以我觉得最好能保存一次内容,然后用它来生成两个字段。我该如何解决这个问题?谢谢!
答案 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