DRF:在序列化程序中默认UserProfile字段的方法?

问题描述 投票:0回答:1

在序列化器中使用当前用户模型很简单:

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

但是,如果我有自己的UserProfile模型,并且我想在序列化程序中使用当前的UserProfile,该怎么办?只是做CurrentUserDefault().profile当然不起作用,因为此时这是一个空对象。

python django django-rest-framework
1个回答
0
投票

事实证明这个问题很容易解决。如果你看一下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_contextSerializer调用,然后__call__方法调用来接收物体。因此,以任何您想要的方式重写此代码非常简单。

TLDR

只需在此处添加:

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

无论你需要你的个人资料,只需写下:

user_profile = serializers.PrimaryKeyRelatedField(
        read_only=True,
        default=serializers.CurrentUserProfileDefault()
    )
© www.soinside.com 2019 - 2024. All rights reserved.