• auto_now与auto_now_add之间的区别


    作用

      auto_now_add作用:数据入库后会自动取当前时间入库

      auto_add作用:数据入库的时候也会取当前时间入库,数据更新时候会产生更新效果。

    auto_add坑点

    model

    class UserInfo(models.Model):
        """
        时间问题
        """
        name = models.CharField(max_length=16)
    
        t1 = models.DateField()
        t2 = models.DateField(auto_now=True) 
        t3 = models.DateField(auto_now_add=True)
        t4 = models.DateTimeField(auto_now=True)
        t5 = models.DateTimeField(auto_now_add=True)

    插入实例:

    view视图

    def test(request):
        ret = models.UserInfo.objects.create(
            name='张三',
            t1 = '2021-7-1'
        )
         return HttpResponse('ok')

    数据库数据

     我们可以看出auto_now_add和auto_add首次创建都会入库当前时间

    我们看看更新

    按理说如果我们更新数据的话auto_add会更新我们数据库时间

    def test(request):
        # 这种更新方式,auto_now不会生效
        ret = models.UserInfo.objects.filter(name='李四').update(
            name = '王五',
        )
    
        
        return HttpResponse('ok')

    我们看看数据,实际上数据没有更新。这个就是auto_add的坑。auto_add如果使用update语句是不会更新时间的。

    解决办法有两个:

    1.手动自己更新

    def test(request):
        ret = models.UserInfo.objects.filter(name='张三').update(
            name = '王五',
            t4 = datetime.now()
        )
    
         return HttpResponse('ok')

    我们看一下数据,时间更新了

    2.使用save不使用update进行更新,这也是更新的第二种写法。

    def test(request):
        ret = models.UserInfo.objects.filter(name='王五').first()
        ret.name = '赵六'
        ret.save()
    
        return HttpResponse('ok')

    我们看一下数据,依然更新了

  • 相关阅读:
    如何退出天擎
    git彻底删除或变更子模块
    湖北校园网PC端拨号算法逆向
    PPPoE中间人拦截以及校园网突破漫谈
    vscode打开django项目pylint提示has not "object" member
    从客户端取到浏览器返回的oauth凭证
    教程视频如何压制体积更小
    windows中的软链接硬链接等
    关于博客园和独立博客的一些打算
    拉勾抓职位简单小爬虫
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14960662.html
Copyright © 2020-2023  润新知