2009-05-26 16 views
1

このサイトでは、記事やブログの2つのオブジェクトを利用しています。記事やブログを閲覧するたびに、関連するカウンターが1つ増えます。Djangoコンテンツタイプとデコレータ

アイデアは、記事とエントリの「人気」を測定する「トップテン」アプリケーションを持つことです。

私は複数のオブジェクトを使用しているため、トラッカーモデルで関連するオブジェクトにgenericForeignKeyを使用したいと思います。

#models.py 
class Tracker(models.Model): 
    count = models.PositiveIntegerField(default=1) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
    def hit(self): 
     self.count += 1 

ビュー機能をラップするデコレータを作成したいと思いますが、それは必要ないかもしれません。

おかげ

答えて

2

私は右のあなたを理解していれば、あなたはすべてのオブジェクトの各インスタンス化をカウントします。私はpost_initsignalを使ってそれを行います - あなたがデコレータではないと気にしないなら、私はそれをします。ここで

は、コードですが、私は書いた - 代わりにpost_initのpost_saveを使用して:DBは、オブジェクトのクエリでヒットするたび

def thumb_init(sender, **kwargs): 
    kwargs['instance'].process() 
    kwargs['instance'].make_thumbnail() 

post_init.connect(thumb_init, sender=Thumbnail) 
post_init.connect(thumb_init, sender=<otherModel here>) 
+0

のでpost_init信号が送信されますか?また、カウンターで信号を聞いて応答することで、特定の「インスタンス」がビュー内でインスタンス化された回数をカウントすることができます。驚くばかり! –

+0

これは解決策ではありませんが、close:post_initシグナルはadminでもインスタンス化が発生するたびに送信されます。私はユーザービューだけを追跡する必要があります。私はカスタム信号を作ろうとします。 –

+0

あなたのビューにobj.touched = Trueのような猿のパッチを当てて、オブジェクトがビューに触れているとマークする*ことができます。信号uでそれをチェックします(そしてそれをもう一度削除する必要があります) – vikingosegundo

関連する問題