调用一次方法在Django Rest Framework serializ中设置多个字段

2024-04-27 04:01:33 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用Django Rest框架序列化程序一次性调用同一方法来设置多个字段?这就是我现在所做的,但是这显然调用了这个方法两次。我怎么能限制它只被调用一次?在

class MyModel(models.Model):
    def GetTwoValues(self):
        foo = []
        bar = []

        # expensive operation

        return foo, bar

class MyModelSerializer(serializers.HyperlinkedModelSerializer):
    foo = serializers.SerializerMethodField()
    bar = serializers.SerializerMethodField()

    def get_foo(self, obj):
        foo, _ = obj.GetTwoValues()
        return foo

    def get_bar(self, obj):
        _, bar = obj.GetTwoValues()
        return bar

    class Meta:
        model = MyModel
        fields = ('FirstValue', 'SecondValue',)

Tags: django方法selfrestobjgetreturnfoo
1条回答
网友
1楼 · 发布于 2024-04-27 04:01:33

有几个选项:

1)存储这些值,以便只调用一次昂贵的方法。E、 g.:

def _get_two_values(self, obj):
    if not hasattr(self, '_two_values'):
        self._two_values = obj.GetTwoValues()
    return self._two_values

def get_foo(self, obj):
    foo, _ = self._get_two_values(obj)
    return foo

def get_bar(self, obj):
    _, bar = self._get_two_values(obj)
    return bar

2)从序列化程序中删除这两个字段,并在序列化程序的to_representation方法中分配这两个值。E、 g.:

^{pr2}$

相关问题 更多 >