Order_by使用反向关系在日期,同时将无值推送到最后

时间:2015-01-17 16:30:22

标签: django django-queryset

使用Django 1.7。我在我的网站上使用搜索字段,可以搜索链接到Person对象的任何术语。

这是一个摘录:

Person.objects.filter(
    Q(first_name__icontains=term) |
    Q(last_name__icontains=term) |
    ...
).distinct()[:6]

我的模特(简化):

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    ...

class Comment(models.Model):
    person = models.ForeignKey(Person)
    date = models.DateField(default=datetime.date.today)
    info = models.TextField()

问题:如果多人拥有相同的名字,我想按最新评论排序。如果该人没有评论,那么该人应该在结果列表的底部。

我尝试使用Person.objects.filter(first_name__icontains="i").order_by('-comment__date').distinct(),这似乎在一定程度上起作用:如果所有Person都有Comment,那么这就行了。 但是,如果Person没有Comment,则会先显示它们(在顶部)。 我确实希望它们显示出来,但是在列表的底部。

如果在一个查询中无法做到这一点,那么最有效的解决方法是什么?

0 个答案:

没有答案