我需要将用户附加到请求,这似乎是一件很常见的事情,但事实证明这几乎是不可能的。
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/