具有复杂ForeignKey遍历的Tricky Django查询集创建,连接和排序问题

时间:2015-10-15 00:05:51

标签: python django django-models django-views django-queryset

我维护一个实时聊天网站(Python2.7,Django 1.5),任何用户都可以设置“标题”声明,然后通过“公开回复”在所述标题声明下与其他人聊天。

我想制作一个'用户活动日志'(查询集),显示:

1)用户自己制作的所有标题声明

2)所有由用户通过“回复”参与的自己或其他人制作的标题声明

3)1& 2连接在一起,然后按活动在每个标题声明中的新鲜程度排序。例如。用户创建的标题声明 2分钟前优先于 5分钟前创建的标题声明。但是,用户未创建的标题声明,但她回复 1分钟前的标题声明,将优先于她自己创建的前标题声明 2分钟前

4)结果将由15

分页

5)结果查询集中应该没有重复的条目。即,删除在(1)和(2)联合时创建的任何重复标题。

我正在尝试在get_queryset()方法内的views.py中的ListView类型类中实现上述目的。但似乎无法绕过如何做到这一点。任何人都可以帮助我吗?

我的 models.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)

views.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_on'排序时,我最终只使用标题时间戳进行排序。这不起作用,因为正如我在上面的要求(3)中所述,我最近发布回复的标题将优先于我最近创建的标题。例如。如果我创建了一个 2分钟之前的标题,我在24小时之前创建的标题我/其他人发布的 1分钟之前的回复仍然更新鲜

我该怎么做?效率也是一个考虑因素。如果您觉得需要,请要求更清晰。

0 个答案:

没有答案