簡體   English   中英

Django組對象按外鍵和計數

[英]Django group objects by foreign key and count

我已經按照以下結構在數據庫中存儲了一個網址表:

[條目1]

Url: ForeignKey(Url)
Referer Url: http://facebook.com/post/123
User Agent: Mozilla etc...
IP: 123.123.123.123
Is under proxy?: True

所有條目都與上面的相似。

我需要按“ 網址”列對所有條目進行分組,然后計算有多少個具有相同“ 網址”列的條目具有相同的“用戶代理”,“ IP”和“引薦來源網址”。

有沒有辦法用Django ORM做到這一點?


范例

具有相同Url列的條目:其中12個具有XXX引薦,6個具有YYY引薦,其中10個具有XXX.XXX.XXX.XXX IP,100個具有YYY.YYY.YYY.YYY IP


誰能解釋給我這個過程背后的邏輯?


更新好的,伙計們,我是自己做的。 這是代碼:

urls = Url.objects.all() # select all urls
    for url in urls: # for each url count how many times the same ip, useragent, etc... are repeated
        visits = VisitLog.objects.filter(url=url)
        visit_ip = visits.values('ip').annotate(ip_count=Count('ip'))
        visit_useragent = visits.values('useragent').annotate(useragent_count=Count('useragent'))
        visit_referring_url = visits.values('referring_url').annotate(referring_url_count=Count('referring_url'))
        print(visit_referring_url)

現在有沒有一種方法可以以一種更優雅的方式來完成它而無需進行太多查詢?

不,您不能為此使用ORM。 您可能必須提取用戶代理,IP和引薦來源網址的所有唯一組合。 然后去獲取匹配每個條目的計數。

您可能最終使用raw或編寫自定義SQL

首先想到的是對實例表運行選擇,以在所有四個列中查找不同的值。 這些結果將需要用於計算重復項。

暫無
暫無

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

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