在Django中查询数据库中两个字段的总和,排序错误

时间:2011-11-22 18:57:14

标签: 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(background_image__isnull=True) | Q(background_image__exact='')
).extra(
    select={'total_count':'twitter_count + facebook_count'},order_by=['-total_count']
)[:99]

1 个答案:

答案 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]