我正在尝试使用CurrentUserDefault
一个序列化器的类。
user = serializers.HiddenField(default=serializers.CurrentUserDefault())
文档说:
为了使用它,“请求”必须作为
实例化序列化器时的上下文字典。
我不确定如何创建序列化器。在视图上,我使用以下命令创建所有序列化器:
serializer = NewModelSerializer(data=request.data)
所以我尝试过:
context = dict(request.data)
context['request'] = request
serializer = NewModelSerializer(data=context)
and
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 Framework 3.0 和 Python 2.7.6
Django REST Framework 使用中央序列化器处理对象的序列化和反序列化。有时为了帮助反序列化和序列化,它需要一些上下文,例如当前的view
or request
正在使用。您通常不必担心它,因为通用视图会自动为您处理它。这在下面的文档中有介绍“包括额外的上下文” http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context它利用了可选的context
序列化器的参数。
当您手动使用序列化器时,上下文必须作为字典传入。有些字段需要特定的键,但大多数情况下您只需要request
key 作为传入请求的引用。这将允许HyperlinkedRelatedField
生成完整的 URL,以及诸如CurrentUserDefault
按预期执行。
context = {
"request": self.request,
}
serializer = NewModelSerializer(data=request.data, context=context)
上下文字典也可在通用视图上使用,因为get_serializer_context
方法,它将自动使用常用键(例如request
and view
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)