【问题标题】:DRF: Do DRF serializers, SerializerMethodField have execution orderDRF:DRF 序列化器、SerializerMethodField 是否有执行顺序
【发布时间】:2020-09-17 22:48:40
【问题描述】:
class ProfileAPI(serializers.Serializer):
    name = serializers.SerializerMethodField()
    age = serializers.SerializerMethodField()

    def get_name(self, obj):
        return "name"

    def age(self,obj):
        return 78

在执行 SerilaizerMethodField 时是否有排序或者它是随机的,意味着“get_name”会在“get_age”之前执行。

【问题讨论】:

    标签: django django-rest-framework django-serializer


    【解决方案1】:

    执行顺序按照 meta 中的字段顺序。

    class ProfileAPI(serializers.Serializer):
        name = serializers.SerializerMethodField()
        age = serializers.SerializerMethodField()
    
        def get_name(self, obj):
            return "name"
    
        def age(self,obj):
            return 78
    
        class Meta:
            fields = ["name", "age"]
    

    在上述情况下,首先调用“get_name”,然后调用“get_age”。


    将顺序改为

    class Meta:
         fields = ["age", "name"]
    

    会先执行get_age。

    【讨论】:

    • 执行也很重要字段的声明方式(通过实验找到)。在上述情况下,要让get_age先执行,需要在name = serializers.SerializerMethodField()之前声明age = serializers.SerializerMethodField()
    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 2019-11-03
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多