Django视图计数器



在我的views.py中实现视图计数器功能的最佳方法是什么?

我确实在Django文档中找到了F()表达式,但如何使其工作或有更好的想法?

提前感谢

def watch_video(request, slug):
    video = get_object_or_404(Video, slug=slug)
    template = "single_video.html" 
    #if this function will run , + 1 in Video.views ?

    return render(request,template,{"video":video})

我的型号:

class Video(models.Model):
    video_id = models.CharField(max_length=150)
    title = models.CharField(max_length=150)
    slug = AutoSlugField(populate_from="title")
    description = models.TextField(blank=True)
    views = models.PositiveIntegerField(default=0)
    likes = models.PositiveIntegerField(default=0)
    category = models.ForeignKey("VideoCategory")
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    tags = models.ManyToManyField("Tag")

    def __str__(self):
        return self.title
    def get_absolute_url(self):
        return reverse("watch", kwargs={"slug" : self.slug})

在过滤单个视频的查询集上调用update()

from django.db.models import F
Video.objects.filter(pk=video.pk).update(views=F('views') + 1)
video.views += 1 # to show valid counter in the template

在模型中创建一个递增函数非常简单,它将视图递增1

然后在views.py中,每当用户访问该模型的页面并保存时,都会调用递增函数!

最新更新