Python 每次在django中生成视图时更新模型
每次生成视图PostDetail时,我都会尝试更新我的一个Post模型实例。到目前为止,我已经尝试了多种方法,但没有一种有效。我知道有现成的解决方案(django hitcounter),但我想自己写一个,这样我就可以了解发生了什么 其目标是在用户每次访问PostDetail视图时向post.views添加1Python 每次在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)
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)