2009-05-26 6 views
1

Le site utilise 2 objets - articles et blogs. Chaque fois qu'un article ou un blog est visionné, un compteur associé devrait augmenter de un.Django Contenttypes et décorateur

L'idée est d'avoir une application "top ten" qui mesure la "popularité" des articles et des entrées. Étant donné que j'utilise plus d'un objet, j'aimerais que le modèle Tracker utilise genericForeignKey pour les objets associés. Je voudrais écrire un décorateur qui enveloppe une fonction de vue, mais ce n'est peut-être pas nécessaire.

Merci

Répondre

2

Si je vous comprends bien que vous voulez compter chaque instanciation de chaque objet. Je le ferais en utilisant un post_initsignal - si cela ne vous dérange pas que ce n'est pas un décorateur.

Voici un code, je l'ai écrit - en utilisant post_save au lieu de post_init:

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

donc un signal de post_init est envoyé chaque fois que le db est frappé avec une requête pour un objet? Et en écoutant et en répondant au signal avec un compteur, nous pouvons compter combien de fois une "instance" particulière a été instanciée dans une vue. Impressionnant! –

+0

Ce n'est pas la solution, mais proche: les signaux post_init sont envoyés chaque fois qu'une instanciation se produit dans l'admin aussi; Je dois suivre uniquement les vues de l'utilisateur. Je vais essayer de faire un signal personnalisé. –

+0

À votre avis, vous pouvez * marquer * les objets comme étant touchés par la vue via la correction de singe comme obj.touched = True. dans un signal vous le vérifieriez (et devriez le supprimer encore) – vikingosegundo

Questions connexes