DRF SerializerMethodField:“ obj”参数与self.instance

时间:2019-05-13 00:52:48

标签: django-rest-framework

在Django REST Framework的SerializerMethodField中,self.instance和参数obj之间有什么区别?

根据SerializerMethodField的文档,它讨论obj参数:

  

method_name参数所引用的序列化程序方法应接受单个参数(除了self之外),该参数是要序列化的对象。

Image of code from DRF documentation displaying the <code>obj</code> parameter

并根据Serializers的文档讨论了self.instance

  

将初始对象或查询集传递给序列化程序实例时,该对象将以.instance的形式提供。如果未传递任何初始对象,则.instance属性将为“无”。

然后它们引用相同的对象吗?

1 个答案:

答案 0 :(得分:2)

传递给您方法的obj参数基于SerializerMethodField的source参数。

通常,source参数只是"*""*"指示序列化程序将实例传递给方法。相反,如果您在SerializerMethodField上设置source="date_joined",则get_days_since_joined可能看起来像这样:

def get_days_since_joined(self, date_joined):
    return (now() - date_joined).days