Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django命中计数基于类的视图_Python_Django_Count_Django Class Based Views_Classview - Fatal编程技术网

Python Django命中计数基于类的视图

Python Django命中计数基于类的视图,python,django,count,django-class-based-views,classview,Python,Django,Count,Django Class Based Views,Classview,我正在尝试做一些类似youtube浏览的事情: 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_

我正在尝试做一些类似youtube浏览的事情:

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)
如何在视图或模型中插入:访问计数、ip、视频。

在视图中:

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()

我想用IP地址扩展您的
add\u visit()
model方法:

def add_visit(self, ip):
    _, visit = Visit.objects.get_or_create(self, ip)
    visit.count += 1

并按原样使用DetailView。

您可以使用获取对象是检索对象的方法

from django.utils import timezone
from django.views.generic import DetailView
from books.models import Author

class AuthorDetailView(DetailView):

    queryset = Author.objects.all()

    def get_object(self):
        obj = super().get_object()
        # Record the last accessed date
        obj.last_accessed = timezone.now()
        obj.save()
        return obj
资料来源: