DRF:一种在序列化程序中使用默认用户配置文件字段的方法



在序列化程序中使用当前用户模型很容易:

user = serializers.PrimaryKeyRelatedField(
        read_only=True,
        default=serializers.CurrentUserDefault()
    )

但是,如果我有自己的UserProfile模型,并且我想在序列化程序中使用当前UserProfile,该怎么办?

当然,仅仅做CurrentUserDefault().profile是行不通的,因为此时这是一个空对象。

事实证明,这个问题很容易解决。如果你看一下 CurrentUserDefault 类的源代码,你会发现它非常简单:

class CurrentUserDefault(object):
    def set_context(self, serializer_field):
        self.user = serializer_field.context['request'].user
    def __call__(self):
        return self.user
    def __repr__(self):
        return unicode_to_repr('%s()' % self.__class__.__name__)

我猜set_context是由Serializer调用的,然后调用__call__方法来接收对象。因此,以您想要的任何方式重写此代码非常简单。

TLDR

只需将其添加到某处:

class CurrentUserProfileDefault(serializers.CurrentUserDefault):
    def __call__(self):
        return self.user.userprofile

无论您在哪里需要您的个人资料,只需写:

user_profile = serializers.PrimaryKeyRelatedField(
        read_only=True,
        default=serializers.CurrentUserProfileDefault()
    )

最新更新