Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中查询数据库中两个字段的总和,排序错误_Python_Django_Django Models_Django Queryset - Fatal编程技术网

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

Python 在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

我有一个对象,该对象的表中保存了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]

这没有经过测试,但你能做到吗

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'])