Django模型:默认日期时间未转换为SQL当前时间戳

Django模型:默认日期时间未转换为SQL当前时间戳,django,postgresql,django-models,timestamp,Django,Postgresql,Django Models,Timestamp,我正在使用Django模型创建PostgreSQL数据库。我有一个DateTimeField,我想将当前时间戳设置为默认值。我知道有多个来源建议如何做到这一点。但是,当我在Django之外检查我的DB时,默认时间戳不会显示 我尝试过的方法: 一, 我希望PostgreSQL数据库能够显示: TIMESTAMPTZ非空默认当前时间戳 它显示的是时区不为空的时间戳,但没有默认值。任何关于如何做到这一点的想法都将不胜感激 但是,当我在Django之外检查我的DB时,默认时间戳不会显示 这是正确的,

我正在使用Django模型创建PostgreSQL数据库。我有一个DateTimeField,我想将当前时间戳设置为默认值。我知道有多个来源建议如何做到这一点。但是,当我在Django之外检查我的DB时,默认时间戳不会显示

我尝试过的方法:

一,

  • 我希望PostgreSQL数据库能够显示:
    TIMESTAMPTZ非空默认当前时间戳

    它显示的是时区不为空的时间戳,但没有默认值。任何关于如何做到这一点的想法都将不胜感激

    但是,当我在Django之外检查我的DB时,默认时间戳不会显示

    这是正确的,Django本身管理默认值。不是数据库,Django还管理删除时的
    触发器,而不是数据库。这就提供了更多的灵活性。例如,您可以像对待
    default=now
    一样,将可调用的消息传递给
    default
    。这个可调用函数可以执行复杂的操作来确定默认值,如进行额外的查询、API调用、文件I/O等。在数据库端使用默认值时,这是不可能的

    您可以创建数据迁移文件并手动更改表。您可以使用以下方法初始化数据迁移:

    python manage.py makemigrations --empty app_name
    python manage.py makemigrations--空的应用程序名称
    接下来,您可以更改它生成的文件并指定默认值:

    # 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 3.1于2020-12-16 17:14生成
    从django.db导入迁移
    类迁移(migrations.Migration):
    依赖项=[
    (“应用程序名称”、“迁移名称”),
    ]
    操作=[
    migrations.RunSQL(
    “ALTER TABLE TABLE_name ALTER COLUMN created_在设置默认当前_时间戳时创建”;
    )
    ]

    这样做的好处是Django管理迁移,因此它将迁移尚未迁移的数据库,并因此添加一个默认值。

    不,这是Django自己管理的。显然是这样,但是有办法添加此默认值吗?当我从另一个服务(不是django)添加值时遇到问题。对于这些服务,没有默认值。只需手动将其添加到数据库中即可。是否确定,但没有办法通过django模型执行此操作?谢谢据我所知,没有,除了进行迁移和使用
    RunSQL
    :这样做的好处是Django将使用其迁移管理工具来实现这一点,因此您不必手动更改数据库。
    from django.utils.timezone import now
    ...
    created_at = models.DateTimeField(default=now)
    
    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';
            )
        ]