数据库列不是从基类创建的

问题描述 投票:0回答:1

我正在尝试从 Django 5.0 项目运行迁移,并连接默认 SQLite 数据库

我的models.py文件内容如下

class CustomBaseModel(models.Model):
    InsertedBy = models.BigIntegerField(blank=False),
    InsertedDateTime = models.DateTimeField(blank=False, auto_now_add=True),
    UpdatedBy = models.BigIntegerField(blank=False),
    UpdatedDateTime = models.DateTimeField(blank=False, auto_now_add=True),
    class Meta:
        abstract = True


class ExcelColumnDataType(CustomBaseModel):
    DataTypeName = models.CharField(max_length=100, blank=False)
    class Meta(CustomBaseModel.Meta):
        db_table = "ExcelColumnDataTypes"

但是,当我运行迁移命令时,ExcelColumnDataTypes 表中仅创建“id”和“DataTypeName”列。 未创建基类中指定的列。

自动生成的迁移文件的内容如下

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='ExcelColumnDataType',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('DataTypeName', models.CharField(max_length=100)),
            ],
            options={
                'db_table': 'ExcelColumnDataTypes',
                'abstract': False,
            },
        ),
    ]

我还尝试删除 SQLite 数据库文件中的所有表并删除“migrations”文件夹中的 .py 迁移文件。即使如此,也会出现相同的结果。

你能告诉我我做错了什么吗?

django django-models django-migrations
1个回答
0
投票

经过一番排查,我发现了问题所在。

在模型类中指定属性时,我在两个属性定义之间放置了逗号 (,)。这导致迁移忽略这些属性。

我更新的模型类内容如下:

class CustomBaseModel(models.Model):
    inserted_by = models.BigIntegerField(blank=False)
    inserted_date_time = models.DateTimeField(blank=False, auto_now_add=True)
    updated_by = models.BigIntegerField(blank=False)
    updated_date_time = models.DateTimeField(blank=False, auto_now_add=True)
    class Meta:
        abstract = True


class ExcelColumnDataType(CustomBaseModel):
    data_type_name = models.CharField(max_length=100, blank=False)
    class Meta(CustomBaseModel.Meta):
        db_table = "ExcelColumnDataTypes"

现在迁移工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.