使用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
,则会先显示它们(在顶部)。
我确实希望它们显示出来,但是在列表的底部。
如果在一个查询中无法做到这一点,那么最有效的解决方法是什么?