我维护了一个实时聊天网站(Python2.7,Django 1.5),任何用户都可以设置一个“title”语句,然后通过“public responses”与上述title语句下的其他人聊天。你知道吗
我想生成一个“用户活动日志”(queryset),它显示:
1)用户自己制作的所有标题声明
2)用户通过“回复”参与的由自己或他人制作的所有标题声明
3)1和2串联在一起,然后按每个标题语句中活动的新鲜程度排序。例如,用户在2分钟前创建的标题语句将优先于她在5分钟前创建的标题语句。但是,不是用户创建的标题语句,而是用户在1分钟前回复的标题语句,将优先于用户自己在2分钟前创建的标题语句。你知道吗
4)结果将按15分页
5)结果查询集中不应有重复条目。即,删除(1)和(2)联合时创建的任何重复标题。你知道吗
我试图在中的ListView类型类中实现上述功能视图.py,在get\u queryset()方法中。但我似乎不知道该怎么做。有人能帮我吗?你知道吗
我的型号.py包括:
class Title(models.Model):
description = models.TextField(validators=[MaxLengthValidator(500)])
submitter = models.ForeignKey(User)
submitted_on = models.DateTimeField(auto_now_add=True)
cagtegory = models.CharField("Category", choices=CATEGS, default=1, max_length=25)
image_file = models.ImageField(upload_to=upload_to_location, null=True, blank=True )
class Publicreply(models.Model):
submitted_by = models.ForeignKey(User)
answer_to = models.ForeignKey(Title)
submitted_on = models.DateTimeField(auto_now_add=True)
description = models.TextField(validators=[MaxLengthValidator(250)])
category = models.CharField("Category", choices=CATEGS, default=1, max_length=20)
在视图.py,相关代码为:
class UserActivityView(ListView):
model = Title
slug_field = "username"
template_name = "user_activity.html"
paginate_by = 15
def get_queryset(self):
username = self.kwargs['slug']
user = User.objects.filter(username=username)
title_list1 = Title.objects.filter(submitter=user)
reply_list = Publicreply.objects.filter(submitted_by=user)
titles_with_replies = [reply.answer_to.id for reply in reply_list]
title_list2 = Title.objects.filter(id__in=titles_with_replies)
title_list3 = (title_list1 | title_list2).order_by('-submitted_on').distinct()
return title_list3
这个解决方案对我不起作用,因为当我按'submitted\u on'排序时,我只使用标题时间戳排序。这是行不通的,因为正如我在上述要求(3)中所述,我最近发布回复的标题将优先于我最近创建的任何标题。例如,如果我在2分钟前创建了一个标题,那么我在1分钟前发布的关于我/其他人在24小时前创建的标题的回复仍然更新鲜。你知道吗
我该怎么做?效率也是一个考虑因素。如果你觉得需要的话,一定要问清楚。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐