最近访问过django的页面历史记录

时间:2013-06-13 21:31:09

标签: django

我是django的新手并且正在开展一个项目,我需要在他们的个人资料页面上显示注册用户的最后访问过的页面。我已经在我的扩展用户类中通过向我的主对象添加一个新的many2many字段来实现这一点,我希望保留历史记录。在我看来,每当成员发出请求时,我都会将该对象添加到成员的历史记录中。但这并没有给我我想要的结果。项目未订购,如果用户未登录,则会出现User DoesNotExist错误。我知道有更好的方法,但我找不到它。可能我没有正确的方式。我感谢任何帮助或想法。

class myObjectView(View):
    model = myObject
    template_name = 'app/myobject_detail.html'

    def get(self, request, **kwargs):
        cat = Category.objects.all()
        sec = Section.objects.all()
        self.item = myObject.objects.get(slug = self.kwargs[u'slug'])
        user = User.objects.get(username=request.user.username)

        if user.is_authenticated():
            if self.item in user.member.history.all():
                user.member.history.remove(self.item)
                user.member.history.add(self.item)
                user.save()
            else:
                user.member.history.add(self.item)
                user.save()

1 个答案:

答案 0 :(得分:3)

你的方法有缺点,但如果你需要长期坚持,这种方法并不是很糟糕。

您可以轻松地在m2m中添加ordering字段(查看文档)以添加一些排序感。你也可以通过它的PK命令你的m2m通过表,因为大的PK值意味着给你当前的删除项目代码并再次添加它们的新条目。

ordered_item_history = (user.member.history.through.objects
    .filter(user=user, myObject=self.item)
    .order_by('pk').values_list('myObject', flat=True))

那说最简单的方法就是这样做。

request.session.setdefault('history', []).append(myObj)
request.session.modified = True

现在,在任何视图中,您都可以通过request.session['history']访问这个不断增长的对象历史记录列表。根据需要进行修改以消除重复。