zoukankan      html  css  js  c++  java
  • 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')

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

  • 相关阅读:
    centOS和windows7双系统下重装windows后恢复centOS引导
    第一天
    Spring初学
    myBatis-一级缓存与二级缓存
    myBatis-类型关联
    myBatis-智能标签
    myBati初学
    myBati初学
    博客系统开发
    Y2分班考试 笔试题总结
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14960662.html
Copyright © 2011-2022 走看看