私は既存のサイトの統計を実装しようとしていますが、完全に失われています。どのモデル構造を選択するのか分かりません。今、私が(モデルの関連部分)を持つ:3つの中央の列によって発注の可能性djangoの期間にわたるアクセス統計の生成
file name | downloads for the last 30 days | downloads for the last 7 days | downloads to date | category
:
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)
私が欲しいものは、このような列の統計値を生成することです値。
ので、例:
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)
とNFILEモデルに追加する二つのフィールド:だから、私の第一印象は、このような新しいモデルを実装することでした私は、この新しいクラスのすべてのフィールドを管理することができます
downloaders = models.ManyToManyField(Visitor)
viewers = models.ManyToManyField(Visitor)
、と私はすべてを考えますinfoはデータベースにあります(現在はPostgreSQLのSqLite3ですが、どのようなクエリを使うべきですか)。おそらく、別のモデルを使用するか、nFieldクラスに新しいFieldを配置する必要があります。わかりません。
私もカテゴリの、上記と同様の統計を持つようにしたい、などのタグ:
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[0].title = sunshine.bmp
q[0].dcount = 20
q[1].title = cake.txt
q[1].dcount = 15
右:
このようなクエリは、ダウンローダの総数は、このようなもので、
q = nFile.objects.annotate(dcount=Count('downloaders'))
に私にNFILESのリストを与えるでしょうか?しかし、私はすべてのダウンローダに注釈を付けるだけで、私は注釈を付けたいと思います。現在と今の間のenter_dateの人数をカウントしてください(日= 7)
実際に何を求めているのかはっきりしません。あなたはどこに行くべきかについてまともなアイデアを持っているようです。あなたがここから先に進んでいる問題は何ですか? – Marcin
@Marcin私は望みの結果を生み出すクエリーセットを作る方法を知らない。また、私はこのタスクを解決する正しい方法を確信していません(Visitorモデルそのもの、またはnFileモデルへの接続がうまくいかないかもしれません)。 – balazs
私はあなたの質問に説明を入れることをお勧めします。あなたの質問を広範に編集してより明瞭にすることは間違いありません。 – Marcin