Совместное использование переменной между методами 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']

Более того, я чувствую, что, вероятно, есть более простой способ достичь этого.

Вернуться на верх