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