簡體   English   中英

如何在模板中正確顯示遞增的Django模型字段值?

[英]How to show incremented Django model field value in template correctly?

我有一個帖子模型,嘗試正確實現視圖計數器,但是當我嘗試在模板中顯示視圖計數器時,此方法在模板中無法正常工作。

    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>

可能還有另一種方法可以解決此問題,這更正確。 我可以用.update queryset解決嗎?

問題是您使用F表達式來增加視圖計數器,但是必須重新加載該對象才能使它獲取新值。 您可以為此使用refresh_from_db()

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

在不重新加載的情況下, self.views的值將是F()表達式的字符串表示形式,這是您當前在模板中看到的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM