我有一个对象,其中包含twitter和facebook中连接的计数保存在对象的表中。我正在尝试使用.extra字段通过facebook和twitter计数的总和对这些对象的列表进行排序。
某些twitter / facebook字段为空(无),因此合并为空白。这导致一些问题,这些空白的问题首先被排序。有没有办法让这些空白字段排序为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]
答案 0 :(得分: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]