gpt4 book ai didi

Django 模型 : default datetime is not translated into SQL CURRENT_TIMESTAMP

转载 作者:行者123 更新时间:2023-12-04 13:10:59 26 4
gpt4 key购买 nike

我正在使用 Django 模型来创建 PostgreSQL-DB。我有一个 DateTimeField,我想将当前时间戳设置为默认值。我知道有多个消息来源建议如何执行此操作。但是,当我在 Django 之外检查我的数据库时,没有显示默认时间戳。
我尝试过的方法:
1.

created_at = models.DateTimeField(auto_now_add=True)
  • from django.db.models.functions import Now
    ...
    created_at = models.DateTimeField(default=Now())
  • from django.utils.timezone import now
    ...
    created_at = models.DateTimeField(default=now)
    我期望 PostgreSQL 数据库显示: TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP它显示的是 timestamp with time zone not null但没有默认值。任何关于如何做到这一点的想法将不胜感激。

    最佳答案

    However, when I inspect my DB outside of Django, the default timestamp doesn't show up.


    没错,Django 自己管理默认值。不是数据库,Django 还管理着 ON DELETE触发器,而不是数据库。这提供了更大的灵活性。例如,您可以将一个可调用对象传递给 default就像你对 default=now 所做的那样.这个可调用对象可以执行复杂的操作来确定默认值,例如进行额外的查询、API 调用、文件 I/O 等。这对于数据库端的默认值是不可能的。
    您可以制作数据迁移文件并手动更改表。您可以使用以下命令初始化数据迁移:
    python manage.py makemigrations --empty app_name
    接下来,您可以更改它生成的文件并指定默认值:
    # Generated by Django 3.1 on 2020-12-16 17:14
    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 管理迁移,因此它会迁移尚未迁移的数据库,从而添加一个默认值。

    关于Django 模型 : default datetime is not translated into SQL CURRENT_TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65322837/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com