我正在使用 Django 1.8 ,我正在尝试实现对模型的简单记录。我已经覆盖了类的save方法。但是,我还想记录哪个用户负责更改,但请求对象不可用,因为它没有传递给save方法。我不想在所有出现的save方法中传递用户,因为我使用的是 django-rest-framework 。
这是我的代码:
def save(self, *args, **kwargs):
order = super(Order, self).save(*args, **kwargs)
try:
json_object = serializers.serialize('json', [ order, ])
# I want to log the current user too.
OrderLog.objects.create(order = order, object = json_object)
except Exception as e:
print e
return order
答案 0 :(得分:2)
可以获得当前用户。你必须为它实现自己的小型中间件。
您需要以下方法和中间件类。
您的中间件文件
from threading import local
_thread_locals = local()
def get_current_user():
return getattr(_thread_locals, 'user', None)
class ThreadLocals( object ):
"""Middleware that gets various objects from the request object and saves them in thread local storage."""
def process_request( self, request ):
_thread_locals.user = getattr( request, 'user', None )
<强> Settings.py 强>
MIDDLEWARE_CLASSES += (
"your.path.to.middleware.ThreadLocals"
)
您的保存方法有些
save(self):
from your.path.to.middleware import get_current_user
user = get_current_user()
答案 1 :(得分:-1)
由于模型独立存在,因此无法让用户在模型的保存方法中执行请求。
您可以随意调用保存方法,即使根本没有请求也是如此。
因此,您需要将用户传递给每个保存调用,或者在调用save之前/之后需要登录调用save的函数。