Python 每次在django中生成视图时更新模型

Python 每次在django中生成视图时更新模型,python,django,Python,Django,每次生成视图PostDetail时,我都会尝试更新我的一个Post模型实例。到目前为止,我已经尝试了多种方法,但没有一种有效。我知道有现成的解决方案(django hitcounter),但我想自己写一个,这样我就可以了解发生了什么 其目标是在用户每次访问PostDetail视图时向post.views添加1 models.py class Post(models.Model): title = models.CharField(max_length=200, unique=True)

每次生成视图PostDetail时,我都会尝试更新我的一个Post模型实例。到目前为止,我已经尝试了多种方法,但没有一种有效。我知道有现成的解决方案(django hitcounter),但我想自己写一个,这样我就可以了解发生了什么

其目标是在用户每次访问PostDetail视图时向post.views添加1

models.py

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now=True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)
    views = models.IntegerField(default=0)

    class Meta:
        ordering = ['-created_on']
url.py
URL模式=[
路径('/',views.postdail.as_view(),name='post_detail'),
]

一旦您到达Django可以返回响应的点(例如:成功找到
Post
对象等)-您可以增加对象的视图计数,然后继续返回响应,因此如果您将视图更改为:

class PostDetail(generic.DetailView):
    model = Post
    template_name = 'blog/post_detail.html'

    def render_to_response(self, context, **kwargs):
        self.object.views += 1
        self.object.save()
        return super().render_to_response(context, **kwargs)

一旦到达Django可以返回响应的点(例如:成功找到
Post
对象等)-您可以增加对象的视图计数,然后继续返回响应,因此如果您将视图更改为:

class PostDetail(generic.DetailView):
    model = Post
    template_name = 'blog/post_detail.html'

    def render_to_response(self, context, **kwargs):
        self.object.views += 1
        self.object.save()
        return super().render_to_response(context, **kwargs)
class PostDetail(generic.DetailView):
    model = Post
    template_name = 'blog/post_detail.html'

    def render_to_response(self, context, **kwargs):
        self.object.views += 1
        self.object.save()
        return super().render_to_response(context, **kwargs)