我正在尝试将会话用户拉入我模型的save()方法。 The docs for HttpRequest我发现的所有示例都假设您已经将对象设置为instanciated,但我似乎无法找到一个可以进行实例化的方法。
我想我应该使用HttpRequest.user
,但我不知道如何在我的模型中生成实例,所以我实际上可以这样做。
这是我的save()覆盖。它生成type object 'HttpRequest' has no attribute 'user'
,但考虑到这是一个类而不是对象引用并不令人惊讶。:
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not hasattr(self, 'id'):
self.date_created = timezone.now()
self.created_by = HttpRequest.user
self.last_updated_date = timezone.now()
self.last_updated_by = HttpRequest.user
super(Caregiver, self).save(*args, **kwargs)
views.py已添加了更多信息
class CaregiverCreateView(CreateView):
template_name = 'single_form_generic.html'
model = Caregiver
form_class = CaregiverCreateForm
答案 0 :(得分:2)
django-cuser可以轻松完成此操作。该库添加了可以在视图,模型方法等中调用的中间件,以获取当前用户。如果您可以通过模型的保存方法分配用户,那么您只需要调用中间件来检查会话,如下所示。
设置完成后,可以这样调用:
from cuser.middleware import CuserMiddleware
class YourModel(models.Model):
def save(self, *args, **kwargs):
self.created_by = CuserMiddleware.get_user()
super(YourModel,self).save(*args, **kwargs)
答案 1 :(得分:1)
如果您明确调用order by
,则可以将用户实例直接传递给方法:
save()
然后当你在views.py中调用它时,执行:
def save(self, user, *args, **kwargs):
# use the user
答案 2 :(得分:0)
我不得不稍微挖掘一下,但我最终找到了未来googlers的答案:
class based view docs实际上有一个相关的例子。由于视图已经可以访问请求并且表单和模型可以绑定,因此您只需要通过覆盖form_valid方法将其注入视图提交中。
def form_valid(self, form):
form.instance.created_by = self.request.user
form.instance.last_updated_by = self.request.user
return super(CaregiverCreateView, self).form_valid(form)