python - Django REST Framework,pre_save() 和 serializer.is_valid(),它们是如何工作的?

标签 python django rest django-rest-framework

我需要将用户附加到请求,这似乎是一件很常见的事情,但事实证明这几乎是不可能的。

Django REST Framework 的文档建议使用序列化程序类的 pre_save 方法,我这样做了,但是在调用 serializer.is_valid() 时它不会被调用,这使得它有点毫无值(value),因为没有用户序列化程序验证失败的字段。

我看过一些建议,但它们看起来像是疯狂的 hack 和/或不起作用。另外,我觉得这是一项太常见的任务,不需要我看到人们建议的所有东西。我不能是唯一需要将用户附加到在 REST 请求中创建的对象的人。

最佳答案

假设您正在使用此处描述的身份验证机制之一(或 Django Auth):

http://django-rest-framework.org/api-guide/authentication.html , 你有一个

request.user 对象。

当您创建序列化程序时,将其从请求中拉出/在实例化时将其传入。

MySerializer(data={"user": request.user, "otherField"=... })

如果你正在做:

MySerializer(data=request.DATA)

您需要复制 request.DATA 对象:

from django.utils.datastructures import MultiValueDict
...
data = MultiValueDict(request.DATA)
data['user'] = request.user
MySerializer(data=data)

关于python - Django REST Framework,pre_save() 和 serializer.is_valid(),它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993951/

相关文章:

python - ids 对象的 Django DRF 列表

java - Spring security oauth2 - 从 OAuth2 主体获取自定义数据

java - Android:Restful WS 的结果未显示在我的 ListView 上

java - JAX-RS Rest API 接受带有参数问题的 header , Jersey

python - Pandas DataFrame - 将列转换为 JSON 并添加为新列

python - 将for循环转换为递归[查找连续的工作日]

regex - django 尝试了这些 url 模式

Ubuntu 16.04 上的 python igraph 导入错误

python - 灵活使用 collective.z3cform.datagridfield

python - Django:扩展其他应用程序的模型