Django:上下文处理器为不同的用户返回相同的值

Django:上下文处理器为不同的用户返回相同的值,django,django-models,django-views,Django,Django Models,Django Views,我有一个django应用程序,用户可以在其中回答问题,我在打印不同用户的浏览量时遇到了一些问题 这是我的答案模型 class Answer(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) content = models.TextField() views = models.IntergerField(default=1) 下面是我如何获得context\u pro

我有一个django应用程序,用户可以在其中回答问题,我在打印不同用户的浏览量时遇到了一些问题

这是我的答案模型

class Answer(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    content = models.TextField()
    views = models.IntergerField(default=1)
下面是我如何获得
context\u processors.py
中每个用户的视图数

def all_views(request, pk=None):
    if pk:
        my_user = User.objects.get(id=pk)
    else:
        my_user = request.user
    user_views = Answer.objects.filter(user=my_user).aggregate(Sum('views'))
context = {'user_views': user_views }
return context
但问题是它返回每个用户的
request.user
视图数。意味着如果我以
abc(id=1)
的身份登录并访问
xyz(id=2)
profile(有40个视图),那么它也会在
xyz
profile上显示20个视图,而不是40个视图


如果pk:条件不起作用,为什么
我们如何解决这个问题?谢谢大家!

上下文处理器只传递一个参数-
请求
。您的上下文处理器将永远不会收到
pk
参数,因此
pk
将始终是
None
。如果
pk
是传递给视图的关键字参数,则可以从
request
对象访问它,如下所示:

pk = request.resolver_match.kwargs.get('pk')
(有关详细信息,请参阅文档)

也就是说,你可能不想这么做。请记住,上下文处理器是为所有视图运行的,其中许多视图可能有一个与完全不同的模型相对应的
pk
参数。这会引起各种各样的问题


<>你应该考虑在适当的视图中执行这个逻辑,而不是在上下文处理器中。上下文处理器仅对全局适用的上下文有用,而这不是。

上下文处理器只接受一个参数-
请求
。它永远不会收到
pk
参数,因此
pk
将始终是
None
。你希望
pk
从哪里来?@solarismoke噢,现在我明白了,我的
上下文处理器
与用户访问的URL无关。我原以为
pk
来自同一个URL:(。先生,有没有其他方法可以实现这一点?