在序列化程序中使用当前用户模型很容易:
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()
)