Совместное использование переменной между методами SerializerMethodField
Прежде всего, я хотел бы отметить, что я прочитал этот вопрос , но он не отвечает на мой.
Я хотел бы "поделиться" переменной между двумя методами SerializerMethodField, чтобы не вычислять ее дважды.
Моей первой идеей было сделать что-то подобное: дополнительный атрибут, который я устанавливаю только если значение равно None. Однако Django не позволяет добавлять атрибуты, которые не присутствуют в Meta.fields
# code modified to include only what's important for this question
class MySerializer(serializers.ModelSerializer):
a = serializers.SerializerMethodField()
b = serializers.SerializerMethodField()
sum = None
def compute_sum(self, id):
if self.sum is None:
self.sum = AnotherModel.objects.all().aggregate(Sum('amount'))['amount__sum']
return self.sum
def get_a(self, obj):
return self.compute_sum(obj.id)
def get_b(self, obj):
return self.compute_sum(obj.id) / 100 >= obj.target
class Meta:
model = MySuperModel
fields = ['asdf', 'a', 'b']
Более того, я чувствую, что, вероятно, есть более простой способ достичь этого.