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')

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

 

posted @ 2021-07-01 20:39  西西cc  阅读(457)  评论(0编辑  收藏  举报