Django:上下文处理器为不同的用户返回相同的值
我有一个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
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:(。先生,有没有其他方法可以实现这一点?