postgresql数据库结合django设置日期时间默认当前时间

使用Django模型来创建PostgreSQL-DB。创建时间字段设置datetime类型,在其中设置当前时间作为默认值。但是,当在Django之外检查数据库时,默认的时间戳并没有出现。因为,django设置的日期时间默认值是针对ORM模型的,而不是直接对应的数据库,无论我们设djangomodel层中把创建时间的字段类型默认值设置成auto_now_add=True或default=timezone.now都是不起作用的,如果postgresql不使用ORM模型来进行数据的插入或查询是不起作用的,比如GraphQL查询,它是数据库层面的查询,不管是创建、修改或者查询,数据库中创建时间的字段是没有默认值的,所以插入数据的时候创建时间是没有默认值的,但我们的数据库表是通过django的model层创建生成的,这种情况下我们需要通过一些特殊的方式进行解决。

先创建一个空的数据迁移文件并手动更改表。使用以下方法初始化数据迁移:

python manage.py makemigrations --empty app_name

更改生成的文件并使用以下命令指定默认值:

# Generated by Django 3.2.11 on 2022-08-01 10:48
from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        ('app_name', 'migration_name'),
    ]

    operations = [
        migrations.RunSQL(
            'ALTER TABLE table_name ALTER COLUMN created_at SET DEFAULT CURRENT_TIMESTAMP';
        )
    ]

这样做的好处是Django管理迁移时会执行相应的迁移文件从而可以实现添加一个默认值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值