9

列のデフォルト値はORMレイヤーのみにあり、実際にはDBにデフォルト値を設定していないようです。同時に、たとえば ID キーにはデータベースにデフォルトの修飾子があり、それが可能であることがわかりますが、方法はわかりませんか?

コード例:

class Host(models.Model):
    name = models.CharField(max_length=255, null=False)
    created_at = models.DateTimeField(default=datetime.now, blank=True)

次のテーブルを作成します。

  Column   |           Type           |                          Modifiers                          
------------+--------------------------+-------------------------------------------------------------
 id         | integer                  | not null default nextval('myapp_host_id_seq'::regclass)
 name       | character varying(255)   | not null
 created_at | timestamp with time zone | not null

モディファイアで移行を設定する方法はありdefault current_timestampますか? created_atそうでない場合、生の SQL 移行を渡す方法はありますか? データベースが他のプロセス (バッチ プロセスなど) で使用されているため、アプリケーション層でデフォルト値などを強制する必要がないため、必要です。

4

2 に答える 2

0

これは私にとってはうまくいきました。よりクリーンなソリューションがあるかどうかを知りたいです:

class Migration(migrations.Migration):

dependencies = [
    ('myapp', 'previous_migration'),
]

operations = []

def apply(self, project_state, schema_editor, collect_sql=False):
    cursor = connection.cursor()
    cursor.execute("alter table myapp_host alter column created_at set default current_timestamp")
    return super(Migration, self).apply(project_state, schema_editor, collect_sql)
于 2015-01-24T21:09:55.937 に答える