2009-05-26 137 views
1

该网站使用2个对象 - 文章和博客。每次查看文章或博客时,相关柜台应增加一个。Django Contenttypes和装饰

这个想法是有一个“前十名”的应用程序,用于衡量文章和条目的“流行度”。

因为我使用多个对象,我希望跟踪器模型使用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_save代替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

所以每当数据库被击中的对象的查询发送一个post_init信号?通过用计数器收听和响应信号,我们可以计算一个特定“实例”在视图中被实例化了多少次。真棒! – 2009-05-27 00:39:54