我是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()
答案 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']
访问这个不断增长的对象历史记录列表。根据需要进行修改以消除重复。