Django 使用反向关系按日期订购,同时将“无”值推到末尾
使用Django 1.7。我在我的网站上使用一个搜索字段,在这里可以搜索任何链接到Person对象的术语 以下是摘录:Django 使用反向关系按日期订购,同时将“无”值推到末尾,django,django-queryset,Django,Django Queryset,使用Django 1.7。我在我的网站上使用一个搜索字段,在这里可以搜索任何链接到Person对象的术语 以下是摘录: Person.objects.filter( Q(first_name__icontains=term) | Q(last_name__icontains=term) | ... ).distinct()[:6] 我的模型(简化): 问题:如果多个人的名字相同,我想按最近的评论排序。如果没有对该人员的评论,则该人员应位于结果列表的底部 我试着使用Per
Person.objects.filter(
Q(first_name__icontains=term) |
Q(last_name__icontains=term) |
...
).distinct()[:6]
我的模型(简化):
问题:如果多个人的名字相同,我想按最近的评论排序。如果没有对该人员的评论,则该人员应位于结果列表的底部
我试着使用Person.objects.filter(first\u name\uu icontains=“I”).order\u by('-comment\uu date').distinct()
,这似乎在一定程度上起作用:如果所有Person
都有注释,那么这就可以了。
但是,如果一个人
没有注释
s,那么他们将首先显示(在顶部)。
我确实希望它们显示出来,但在列表的底部
如果这不能在一个查询中完成,那么什么是最有效的解决方法?这将需要一个相当复杂的SQL查询,我认为ORM无法处理。首先尝试创建原始SQL;您可能可以使用.extra(…)
命令将其插入ORM。以下是我执行类似操作的方式:news=news.extra(select={'no\u startdate':“CASE WHEN start\u date为NULL,则0 ELSE 1 END”})
@warath coder:我认为只有当我的人
类拥有一个到注释
的外键时,这才有效。至少我得到了编程错误:列“comment\u id”不存在第1行:选择DISTINCT(如果comment\u id为NULL,则为0 ELS…
(在执行comment
而不是comment\u id
时类似)。我想知道Django 1.8的条件表达式是否是解决方法。。。
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()