Python 在Django中查询数据库中两个字段的总和,排序错误
我有一个对象,该对象的表中保存了twitter和facebook中的连接数。我正在尝试使用.extra字段,通过facebook和twitter计数的总和对这些对象的列表进行排序 一些twitter/facebook字段为空(无),因此组合字段为空。这导致了一些问题,这些空白的问题将首先被排序。有没有办法将这些空白字段排序为0Python 在Django中查询数据库中两个字段的总和,排序错误,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,我有一个对象,该对象的表中保存了twitter和facebook中的连接数。我正在尝试使用.extra字段,通过facebook和twitter计数的总和对这些对象的列表进行排序 一些twitter/facebook字段为空(无),因此组合字段为空。这导致了一些问题,这些空白的问题将首先被排序。有没有办法将这些空白字段排序为0 pages = Page.objects.filter( setup_complete=1, active=1 ).exclude( Q(backgrou
pages = Page.objects.filter(
setup_complete=1, active=1
).exclude(
Q(background_image__isnull=True) | Q(background_image__exact='')
).extra(
select={'total_count':'twitter_count + facebook_count'},order_by=['-total_count']
)[:99]
这没有经过测试,但你能做到吗
annotate(total_count=Sum(twitter_count) + Sum(facebook_count))
如果没有,则可能需要在模型中执行此操作。例如,在模型中添加
def get_total(self):
if twitter_count == None and facebook_count == None:
return 0
elif twitter_count != None and facebook_count != None:
return twitter_count + facebook_count
elif twitter_count != None:
return twitter_count
else:
return facebook_count
total_count = property(get_total)
然后在您的查询中:
pages = Page.objects.filter(
setup_complete=1, active=1
).exclude(
Q(background_image__isnull=True) | Q(background_image__exact='')
).annotate(
total_count=Sum(total)
).order_by=('-total')
)[:99]
我不太明白。页面表中有两个整数字段。我想用这些字段的总和来排序。你能介绍一下我是如何使用annotate()的吗?没有看到与extra()相同的用法这给了我一个FieldError无法将关键字“total_count”解析为field。(我在注释区域将total改为total_count,因为我不知道total来自何处)对于第一个Sum+Sum建议,我得到了以下错误:不支持+:“Sum”和“Sum”的操作数类型
注释(total_count=Sum(twitter_count+facebook_count))
?或者,您仍然可以像这样使用extra()吗:.extra(选择={'total_count':'Sum(twitter_count+facebook_count)},order_by=['-total_count'])