Django 知识库:save()方法更新部分字段

5292 views, 2020/05/15 updated   Go to Comments

开发个人博客时,博客文章的模型通常包含有浏览量计数最近更新时间两个字段,像这样:

class Post(models.Model):
    # 文章浏览量
    views = models.IntegerField(default=0)
    # 最近更新时间
    updated = models.DateTimeField(auto_now=True)

    # other fields...

    # 增加浏览量的方法
    def increase_view(self):
        self.views += 1
        self.save()

每当访客打开文章详情页面时,浏览量需要 +1,所以在视图调用 increase_view

def some_view(request, id):
    post = Post.objects.get(id=id)
    post.increase_view()
    ...

还有更好的自增方式,后面章节再讲。

这样弄的结果就是浏览量虽然正确的增加了,但是最近更新时间 updated 也一起更新了,这显然不是我们想要的。

正确的写法是要传入 update_fields 参数,控制需要更新的字段:

...
def increase_view(self):
    self.views += 1
    self.save(update_fields=['views'])

这样就可以只更新 views 字段了,其他字段都保持原状。




本文作者: 杜赛
发布时间: 2020年05月15日 - 16:05
最后更新: 2020年05月15日 - 16:05
转载请保留原文链接及作者