Python 如何覆盖抽象模型的null和空白字段属性
我想在从抽象模型继承的所有字段上将null和blank设置为true 我目前的尝试遵循了类似的SO问题,例如和,它们表示这是可能的。当从python控制台初始化对象时,我获得了所需的运行时行为,但它没有反映在迁移文件或数据库中 背景: 我有一个系统模型,希望能够在其中对某些数据创建特定于客户端的覆盖。我有以下型号:Python 如何覆盖抽象模型的null和空白字段属性,python,django,inheritance,django-models,Python,Django,Inheritance,Django Models,我想在从抽象模型继承的所有字段上将null和blank设置为true 我目前的尝试遵循了类似的SO问题,例如和,它们表示这是可能的。当从python控制台初始化对象时,我获得了所需的运行时行为,但它没有反映在迁移文件或数据库中 背景: 我有一个系统模型,希望能够在其中对某些数据创建特定于客户端的覆盖。我有以下型号: 抽象BaseSystem-定义可重写字段 具体系统覆盖-包含部分覆盖的记录 混凝土系统-包含“完整”系统记录 务必使SystemOverride null/blank=True中
- 抽象BaseSystem-定义可重写字段
- 具体系统覆盖-包含部分覆盖的记录
- 混凝土系统-包含“完整”系统记录李>
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='System',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SystemOverride',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128)),
('system', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='overide.System')),
],
options={
'abstract': False,
},
),
]
尚未将null=True和blank=True添加到SystemOveride中的name字段中。这无法在类的初始化中完成。makemigrations将永远不会看到它。您需要在元类级别执行此操作。这不能在类的init中执行。makemigrations将永远不会看到它。您需要在元类级别执行此操作。谢谢您的回答,但是您能否详细说明/显示一些如何实现此操作的代码?当您执行makemigration时,您的init不会运行。它在创建类的实例时运行。如果要在创建类之前修改类的属性,请选中modelbase。谢谢你指出这一点。我仍在努力想如何实现这一点。我是否需要覆盖SystemOverride类上的
\uuuuuu new\uuuuuu(cls,name,base,attrs)
方法,以便在属性转到ModelBase之前修改它们?任何建议都将不胜感激。谢谢你的回答,但是你能详细说明/展示一些如何实现的代码吗?当你进行迁移时,你的init不会运行。它在创建类的实例时运行。如果要在创建类之前修改类的属性,请选中modelbase。谢谢你指出这一点。我仍在努力想如何实现这一点。我是否需要覆盖SystemOverride类上的\uuuuuu new\uuuuuu(cls,name,base,attrs)
方法,以便在属性转到ModelBase之前修改它们?任何建议都将不胜感激。谢谢
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='System',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SystemOverride',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128)),
('system', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='overide.System')),
],
options={
'abstract': False,
},
),
]