python - Django REST Framework - CurrentUserDefault 使用

标签 python django django-rest-framework

我正在尝试将 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.

我不确定如何创建序列化程序。在我创建所有序列化程序的 View 中:

serializer = NewModelSerializer(data=request.data)

所以我尝试过:

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 Framework 3.0 和 Python 2.7.6

最佳答案

Django REST Framework 使用中央序列化程序处理对象的序列化和反序列化。有时为了帮助反序列化和序列化,它需要一些上下文,例如正在使用的当前 viewrequest。您通常不必担心它,因为通用 View 会自动为您处理它。这包含在 "Including extra context" 下的文档中并且它利用序列化程序的可选 context 参数。

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

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

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

上下文字典也可以在通用 View 上作为 get_serializer_context 方法使用,它将自动使用常用键(例如 requestview)填充字典

关于python - Django REST Framework - CurrentUserDefault 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632385/

相关文章:

python - 修改 Django 管理应用程序索引

python - Django:将数据从 SQLite 移动到 PostgreSQL

django-rest-framework - 将基本 URL 添加到 Django Rest Swagger

python - Django 项目无法强制 Google Appengine 重定向到 https

python - 如何为 gcloud ml 打包子文件夹?

python - 删除属于特定命名空间的所有 XML 元素

django - 如何使用远程 URL 返回的 JSON 字符串(使用 Django)?

python - 是否可以在任务执行期间使用 django-celery-results 查询 celery 任务的状态?

django - 如何使用 TemplateHTMLRenderer 在 Django-REST-Framework 中创建/放置?

python - 按 SQLAlchemy 中的对象过滤