我正在尝试从 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 迁移文件。即使如此,也会出现相同的结果。
你能告诉我我做错了什么吗?
经过一番排查,我发现了问题所在。
在模型类中指定属性时,我在两个属性定义之间放置了逗号 (,)。这导致迁移忽略这些属性。
我更新的模型类内容如下:
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"
现在迁移工作正常。