在Django中查询数据库两个字段的总和,排序错误
我有一个对象,这个对象里保存了在推特和脸书上的连接数量。现在我想根据推特和脸书的连接总和来给这些对象排序,使用的是.extra这个字段。
不过,有些推特和脸书的字段是空的(也就是None),所以它们的总和就变成了空白。这导致了一些问题,因为这些空白的对象会被排在最前面。有没有办法让这些空白的字段在排序时当作0来处理呢?
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]
1 个回答
0
这个还没有测试过,不过你能这样做吗?
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]