jmi*_*ela 11 python django rest django-rest-framework
我需要将用户附加到请求中,这似乎是一件相当普遍的事情,但事实证明这几乎是不可能的.
Django REST框架的文档建议使用序列化程序类的pre_save方法,我做了,但是当调用serializer.is_valid()时它不会被调用,这使得它没有价值,因为没有用户字段串行器验证失败.
我已经看到了一些建议,但它们看起来像疯狂的黑客和/或不起作用.另外,我觉得这是一个太常见的任务,真正需要我看到人们建议的所有东西.我不能成为唯一需要将用户附加到REST请求中创建的对象的人.
假设您正在使用此处描述的身份验证机制之一(或Django Auth):
http://django-rest-framework.org/api-guide/authentication.html,你有一个
request.user 宾语.
创建序列化程序时,在实例化时将其从请求中拉出/传入.
MySerializer(data={"user": request.user, "otherField"=... })
Run Code Online (Sandbox Code Playgroud)
如果你这样做:
MySerializer(data=request.DATA)
Run Code Online (Sandbox Code Playgroud)
您需要复制request.DATA对象:
from django.utils.datastructures import MultiValueDict
...
data = MultiValueDict(request.DATA)
data['user'] = request.user
MySerializer(data=data)
Run Code Online (Sandbox Code Playgroud)
事实证明,问题是我使用 ListAPIView 作为视图类的基类,并且它没有定义 pre_save 方法。当我添加一些定义了它的 mixins 时,一切都开始工作。
看起来很奇怪,很多基本教程中使用的东西不支持这样的基本功能,但是生活和学习。
| 归档时间: |
|
| 查看次数: |
7837 次 |
| 最近记录: |