Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Django Models_Django Templates_Django Views - Fatal编程技术网

Python 如何在模板中正确显示递增的Django模型字段值?

Python 如何在模板中正确显示递增的Django模型字段值?,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我有一个post模型,并试图实现正确的视图计数器,但当我试图在模板中显示视图计数器时,此方法在模板中无法正常工作 class Post(models.Model): category = models.ForeignKey(Category, on_delete=models.PROTECT) title = models.CharField(max_length=160) slug = models.SlugField(null=True, blank=True

我有一个post模型,并试图实现正确的视图计数器,但当我试图在模板中显示视图计数器时,此方法在模板中无法正常工作

    class Post(models.Model):
    category = models.ForeignKey(Category, on_delete=models.PROTECT)
    title = models.CharField(max_length=160)
    slug = models.SlugField(null=True, blank=True, max_length=160)
    content = models.TextField()
    created = models.DateTimeField(default=datetime.datetime.now, blank=True)
    updated = models.DateTimeField(auto_now=True)
    photo = models.ImageField(upload_to='news/photos/', default='', blank=True)
    views = models.PositiveIntegerField(default=0)

    class Meta:
        verbose_name = 'Post'
        verbose_name_plural = 'News'
        ordering = ['id']

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        return super(Post, self).save(*args, **kwargs)

    def count_views(self):
        self.views = F('views') + 1
        self.save()


class PostDetail(DetailView):
model = Post
template_name = 'news/detail.html'

def get_context_data(self, **kwargs):
    context = super(PostDetail, self).get_context_data(**kwargs)
    self.object.count_views()
    context['latest_news'] = Post.objects.all().order_by('-created')[0:10]
    return context

<span><i class="icon-eye icons"></i> {{ post.views }}</span>
class Post(models.Model):
类别=模型.ForeignKey(类别,on_delete=模型.PROTECT)
title=models.CharField(最大长度=160)
slug=models.SlugField(null=True,blank=True,max_length=160)
content=models.TextField()
created=models.DateTimeField(默认值=datetime.datetime.now,blank=True)
updated=models.DateTimeField(auto\u now=True)
photo=models.ImageField(上传到='news/photos/',默认值='',blank=True)
视图=models.PositiveIntegerField(默认值=0)
类元:
详细名称='Post'
详细名称复数='News'
排序=['id']
定义(自我):
返回自己的标题
def保存(自身、*args、**kwargs):
self.slug=slagify(self.title)
返回super(Post,self).save(*args,**kwargs)
def计数\u视图(自):
self.views=F('views')+1
self.save()
类PostDetail(详细视图):
型号=员额
模板名称='news/detail.html'
def获取上下文数据(自身,**kwargs):
context=super(postdail,self)。获取上下文数据(**kwargs)
self.object.count\u视图()
context['latest_news']=Post.objects.all().order_by('-created')[0:10]
返回上下文
{{post.views}

可能还有另一种更正确的方法来解决这个问题。我可以用.update queryset解决这个问题吗

问题在于,您使用
F
表达式来递增视图计数器,但必须重新加载对象才能拾取新值。您可以使用
refresh\u from\u db()
进行此操作

def count_views(self):
    self.views = F('views') + 1
    self.save()
    self.refresh_from_db()

在不重新加载的情况下,
self.views
的值将是
F()
表达式的字符串表示形式,这就是您当前在模板中看到的内容。

模板为视图计数器显示了什么?F(视图)+值(1)
    class Post(models.Model):
    category = models.ForeignKey(Category, on_delete=models.PROTECT)
    title = models.CharField(max_length=160)
    slug = models.SlugField(null=True, blank=True, max_length=160)
    content = models.TextField()
    created = models.DateTimeField(default=datetime.datetime.now, blank=True)
    updated = models.DateTimeField(auto_now=True)
    photo = models.ImageField(upload_to='news/photos/', default='', blank=True)
    views = models.PositiveIntegerField(default=0)

    class Meta:
        verbose_name = 'Post'
        verbose_name_plural = 'News'
        ordering = ['id']

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        return super(Post, self).save(*args, **kwargs)

    def count_views(self):
        self.views = F('views') + 1
        self.save()


class PostDetail(DetailView):
model = Post
template_name = 'news/detail.html'

def get_context_data(self, **kwargs):
    context = super(PostDetail, self).get_context_data(**kwargs)
    self.object.count_views()
    context['latest_news'] = Post.objects.all().order_by('-created')[0:10]
    return context

<span><i class="icon-eye icons"></i> {{ post.views }}</span>