我有一个django应用程序,用户可以在其中回答问题,我在打印不同用户的观看次数时遇到了一些麻烦。
这是我的答案模型,
class Answer(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
content = models.TextField()
views = models.IntergerField(default=1)
以下是我如何获得context_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)
的身份登录,有20个视图&访问包含40个观看次数的xyz (id=2)
个人资料,然后在xyz
个人资料中显示20个观看次数,而不是40次。
为什么if pk:
条件不起作用? &安培;我们如何解决这个问题?谢谢!
答案 0 :(得分:1)
上下文处理器只传递一个参数 - request
。您的上下文处理器永远不会收到pk
参数,因此pk
始终为None
。如果pk
是传递给您视图的关键字参数,那么您可以从request
对象访问它,如下所示:
pk = request.resolver_match.kwargs.get('pk')
(请参阅resolver_match
的文档。)
那就是说,你可能不想这样做。请记住,上下文处理器是为所有视图运行的,其中许多视图可能具有与完全不同的模型对应的pk
参数。这将导致各种各样的问题。
您应该考虑在适当的视图中执行此逻辑,而不是在上下文处理器中。上下文处理器仅对全局适用的上下文有用 - 这不是。