在序列化程序中使用当前的用户模型很简单:
user = serializers.PrimaryKeyRelatedField(
read_only=True,
default=serializers.CurrentUserDefault()
)
但是如果我有自己的UserProfile模型并且我想在序列化程序中使用当前的UserProfile会怎样。只做CurrentUserDefault().profile
当然不起作用,因为此时这是一个空对象。
答案 0 :(得分: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_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()
)