【发布时间】:2015-09-11 08:59:52
【问题描述】:
我有一种情况,序列化器字段的值取决于当前登录用户的身份。我已经看到了如何在初始化序列化程序时将用户添加到上下文中,但我不确定在使用 ViewSet 时如何执行此操作,因为您只提供序列化程序类而不是实际的序列化程序实例。
基本上我想知道如何去:
class myModelViewSet(ModelViewSet):
queryset = myModel.objects.all()
permission_classes = [DjangoModelPermissions]
serializer_class = myModelSerializer
到:
class myModelSerializer(serializers.ModelSerializer):
uploaded_by = serializers.SerializerMethodField()
special_field = serializers.SerializerMethodField()
class Meta:
model = myModel
def get_special_field(self, obj):
if self.context['request'].user.has_perm('something.add_something'):
return something
抱歉,如果不清楚,来自 DOC: Adding Extra Context 哪个说要做
serializer = AccountSerializer(account, context={'request': request})
serializer.data
但我不确定如何从视图集中自动执行此操作,因为我只能更改序列化程序类,而不是序列化程序实例本身。
【问题讨论】:
-
你试过
self.context.get('request').user.has_perm("some.permission")吗? -
您希望
something在输出中与序列化程序的其他字段一起返回吗? -
对不起,如果不清楚,问题是 self.context 在序列化程序中是空的。
-
AccountSerializer(account, context={'request': request})是我所需要的一切 -
citynorman 你在哪里定义请求?我尝试将请求定义为:
context={'request': { 'user': self.admins[0].user }},但它不起作用!
标签: django django-rest-framework serialization