作用
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')
我们看一下数据,依然更新了