2013-04-17 67 views
1

我試圖做類似YouTube的訪問量:Django的命中計數,基於類的觀點

models.py 
class Video(models.Model): 
    title = models.CharField(max_length=100) 
    embed = models.TextField 
    created_at = models.DateTimeField(auto_now_add=True,editable=False) 
    updated_at = models.DateTimeField(auto_add=True,editable=False) 
    visit_count = models.IntegerField(default=0) 

    def add_visit(self): 
     if self.visit_count is not None: 
      self.visit_count += 1 
     else: 
      self.visit_count = 0 

views.py 
class VideoDetail(DetailView): 
    model = Video 

    def get_context_data(self, **kwargs): 
     context = super(VideoDetail, self).get_context_data(**kwargs) 
     self.object.add_visit() 
     self.object.save() 
     return context 

Example use: 
    Video.objects.order_by('-visit_count') 

那麼,一切工作正常,但並不完全,因爲我可以通過IP數限制。

class Video(models.Model): 
    title = models.CharField(max_length=100) 
    embed = models.TextField 
    created_at = models.DateTimeField(auto_now_add=True,editable=False) 
    updated_at = models.DateTimeField(auto_add=True,editable=False) 

class Visit(models.Model): 
    video = models.ForeignKey(Video) 
    ip = models.IPAddressField() 
    visit_count = models.IntegerField(default=0) 

如何在視圖或模型中插入:visit_count,ip,video。

回答

0

查看:

def get(self, req, *k, **kw) 
    is_created, visit = Visit.objects.get_or_create(this.object, ip) 
    if is_created: 
     this.object.add(visit) 
    else: 
     visit.count +=1 
     visit.save()