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

68阅读 · 2评论 · 2020/05/15发布   前往评论

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

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
知识共享许可协议   转载请保留原文链接及作者


登录 后回复

共有2条评论

avatar
Jacky 么么哒! 1

博主的新专栏收视率不高啊indecision

14天前 回复


avatar
杜赛 [博主] Jacky 么么哒! 0

无所谓,写博客就不能看重这些

12天前 回复