【发布时间】:2019-10-02 07:38:41
【问题描述】:
这里我尝试使用自定义中间件更新用户的上次访问。但这不起作用。它没有更新数据库中的 last_visit 时间。
我在这里做错了什么?
models.py
class Staff(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, related_name='staff')
name = models.CharField(max_length=255, blank=True, null=True)
last_visit = models.DateTimeField(default=now(), blank=True)
views.py
class CheckUserLastVisitMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
Staff.objects.filter(pk=request.user.pk).update(last_visit=now())
response = self.get_response(request)
return response
settings.py
MIDDLEWARE = [
'organization.views.CheckUserLastVisitMiddleware',
【问题讨论】:
-
无关,但是这个
Staff.objects.filter(pk=request.user.pk)是错误的-Staff有它自己的pk,它和User.pk不一样,所以你没有更新正确的Staff记录(s ) (或者,如果发生,那只是偶然)。正确的查询是Staff.objects.filter(user=request.user)。 -
@brunodesthuilliers 之前是
User.objects.filter(pk=request.user.pk).update(staff__last_visit=now()),它说没有staff__last_visit的文件名,所以我改成了这个。谢谢,现在我会改成那个 -
我可以建议您read this 并三思而后行吗?
标签: django middleware