簡體   English   中英

在Django中查詢數據庫以獲取兩個字段的總和,排序錯誤

[英]Query database in Django for sum of two fields, sorting wrong

我有一個對象,該對象具有保存在該對象表中的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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM