[英]Annotating query with sum of multiplication of two fields from a related model in 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.