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

发布于:2023-09-14 ⋅ 阅读:(418) ⋅ 点赞:(0)

使用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管理迁移时会执行相应的迁移文件从而可以实现添加一个默认值。


网站公告

今日签到

点亮在社区的每一天
去签到