Skip to content

Field default values are ignored in schema editor (migrations) #2091

@tsifrer

Description

@tsifrer

Describe the bug
If field has a default value specified, schema editor doesn't pass it through to SQL.

To Reproduce
Example model:

class DummyDefault(models.Model):
    default_str = fields.CharField(max_length=255, null=True, default="My default string")
    default_int = fields.IntField(default=1337)
    default_bool = fields.BooleanField(default=True)
    default_datetime_auto_now = fields.DatetimeField(auto_now=True)
    default_datetime_auto_now_add = fields.DatetimeField(auto_now_add=True)

Calling tortoise makemigrations correctly generates the migration file, and also every default is present in the migration file.
However tortoise sqlmigrate and tortoise migrate generate below SQL which is missing all the default values

CREATE TABLE "dummydefault" (
    "id" SERIAL NOT NULL PRIMARY KEY,
    "default_str" VARCHAR(255),
    "default_int" INT NOT NULL,
    "default_bool" BOOL NOT NULL,
    "default_datetime_auto_now" TIMESTAMPTZ NOT NULL,
    "default_datetime_auto_now_add" TIMESTAMPTZ NOT NULL
);

If altering a columns default later on, I've switched default_datetime_auto_now field from auto_now=True to auto_now_add=True it correctly generates a migration file, but the sqlmigrate returns an empty SQL.

Expected behavior
Default values should be present in the SQL.

CREATE TABLE "dummydefault" (
    "id" SERIAL NOT NULL PRIMARY KEY,
    "default_str" VARCHAR(255) DEFAULT 'My default string',
    "default_int" INT NOT NULL DEFAULT 1337,
    "default_bool" BOOL NOT NULL DEFAULT True,
    "default_datetime_auto_now" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "default_datetime_auto_now_add" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);

This expected sql was generated via from tortoise.utils import get_schema_sql

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions