Django REST框架CurrentUserDefault us

2024-04-28 05:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将CurrentUserDefault类用于一个序列化程序。在

user = serializers.HiddenField(default=serializers.CurrentUserDefault())

文件上说:

In order to use this, the 'request' must have been provided as part of the context dictionary when instantiating the serializer.

我不知道如何创建序列化程序。在视图中,我使用以下内容创建所有序列化程序:

^{pr2}$

所以我试图:

context = dict(request.data)
context['request'] = request
serializer = NewModelSerializer(data=context)

以及

context['request'] = {'user': request.user}

两种情况下的误差是相同的:

Exception Type:     KeyError
Exception Value:    'request'
on:
/Users/Alfonso/virtualenvs/sports/lib/python2.7/site-packages/rest_framework/fields.py in set_context

        self.user = serializer_field.context['request'].user

我还试着用相同的运气对字典(u'request')的键进行编码。在

有没有更好的方法将记录的用户传递给序列化程序?在

我使用的是Django REST framework3.0和python2.7.6


Tags: 文件thein程序defaultdata序列化request
1条回答
网友
1楼 · 发布于 2024-04-28 05:27:45

Django-REST框架使用中央序列化程序处理对象的序列化和反序列化。有时为了帮助反序列化和序列化,它需要一些上下文,比如当前使用的view或{}。您通常不必担心它,因为通用视图会自动为您处理它。这在"Including extra context"下的文档中有介绍,它利用了序列化程序的可选context参数。在

手动使用序列化程序时,必须将上下文作为字典传入。有些字段需要特定的键,但在大多数情况下,您只需要request键作为对传入请求的引用。这将允许HyperlinkedRelatedField生成一个完整的URL,以及像CurrentUserDefault这样的附加功能按预期执行。在

context = {
    "request": self.request,
}

serializer = NewModelSerializer(data=request.data, context=context)

上下文字典在泛型视图上也可用作get_serializer_context方法,它将用常用的键自动填充字典,例如request和{}。在

相关问题 更多 >