我已经阅读了其他几个问题,但我要找的东西不在那里。
我想计算用户浏览了 ToPost/to_post.html 部分的次数。
延迟重定向有效,但增加访问次数无效:post.visit_num += 1
我有一个 View ,其模板在一秒钟后重定向:
def ToPost(request, pk):
post = Post.objects.get(pk=pk)
post.visit_num += 1
args = {'post': post}
return render(request, 'posts/to_post.html', args)
pk 在 URL 中:
url(r'^(?P<pk>\d+)/to-post/$', views.ToPost, name='to_post'),
模板to_post.html:
{% extends 'base.html' %}
{% block head %}
<meta http-equiv="refresh" content="1;url={% url 'home_space:view_post' pk=post.pk %}">
{% endblock %}
{% block body %}
<div class="container">
<h2>
To post {{ post.pk }}...
</h2>
</div>
{% endblock %}
Post的模型:
class Post(models.Model):
title = models.CharField(max_length=128, verbose_name='Title')
body = models.CharField(max_length=500, verbose_name='Description')
user = models.ForeignKey(User, on_delete=models.CASCADE)
visit_num = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title
请您参考如下方法:
您必须在递增后保存 post 实例,并使用 F 对象来避免竞争条件。也不要将函数名称大写,而是使用 snake_case,更多关于 F 对象的信息在这里 https://docs.djangoproject.com/en/2.1/ref/models/expressions/#f-expressions
from django.db.models import F
def to_post(request, pk):
post = Post.objects.get(pk=pk)
post.visit_num = F('visit_num') + 1
post.save()
args = {'post': post}
return render(request, 'posts/to_post.html', args)
