我試圖爲現有的網站實施統計,但我完全失去了,不知道選擇哪種模型結構。現在,我有什麼(模型的相關部分):在Django的時間段生成訪問統計
class nFile(models.Model):
title = models.CharField(max_length=40)
upfile = models.FileField()
downloaded = models.IntegerField() # here I count the downloads
viewed = models.IntegerField() # here I count the quickviews
comment = models.CharField(max_length=400)
tags = TagField()
category = models.ForeignKey(FileCategory)
我想要的東西,是製作統計,像這樣的列:
file name | downloads for the last 30 days | downloads for the last 7 days | downloads to date | category
與排序由三個中間列的可能性值。
所以例如:
sunshine.bmp | 12 | 7 | 20 | pics
cake.txt | 13 | 5 | 15 | receipes
...
我也想算的訪問者。所以我的第一印象是實行這樣的新模式:
class Visitor(models.Model):
session_key = models.CharField(max_length = 40)
enter_date = models.DateTimeField(auto_now_add = True, editable = False)
leave_date = models.DateTimeField(auto_now_add = True, editable = False)
,並加入到n文件模型中的兩個領域:
downloaders = models.ManyToManyField(Visitor)
viewers = models.ManyToManyField(Visitor)
我可以管理這個新類的每一個領域,我認爲每一個info在數據庫中(現在是SqLite3,在生產Postgre上),但是我應該使用哪些查詢。也許我應該使用不同的模型,或者把一個新的Field放到nField類中,我不知道。
我也希望有一個類似的統計上面,用於分類目錄和標籤,如:
category | downloads for the last 30 days | downloads for the last 7 days | downloads to date
和
tag | downloads for the last 30 days | downloads for the last 7 days | downloads to date
我想我應該用聚合和過濾,但找不到神奇的組合。
編輯1:
沒有反應,所以我試圖澄清我想要什麼。
這樣的查詢會給我
q = nFile.objects.annotate(dcount=Count('downloaders'))
NFILES的列表,下載者的總數,是這樣的:
q[0].title = sunshine.bmp
q[0].dcount = 20
q[1].title = cake.txt
q[1].dcount = 15
吧?但我不想只註釋所有的下載,我想註釋的enter_date現在和now-timedelta(天= 7)
目前還不清楚你實際要問什麼。你似乎有一些體面的想法去哪裏。你從這裏前進的問題是什麼? – Marcin
@Marcin我不知道如何構建一個能產生理想結果的查詢集。我也不確定我是否在正確的方式解決這個任務(我的意思是訪問者模型本身或/和nFile模型的連接可能不好)。 – balazs
我建議在你的問題中提出任何澄清。廣泛編輯您的問題以使其更加清晰沒有任何問題。 – Marcin