虽然 Django 文档 https://docs.djangoproject.com/en/3.1/ref/models/options/#managed 提到在 meta 中使用 managed = False 字段用于不创建迁移
当我调用 makemigrations 时,我仍然在进行迁移。
这是模型的元数据:
class FieldOpsBooking(models.Model):
.
.
class Meta:
managed = False
db_table = 'field_ops_booking'
我在 makemigrations 后得到这个
python manage.py makemigrations
Migrations for 'user_analysis':
user_analysis/migrations/0001_initial.py
- Create model FieldOpsBooking
- Create model RewardManagementLeads
Migrations for 'od_engagement':
od_engagement/migrations/0001_initial.py
- Create model NormalisedTonnage
它会创建 0001_initial.py 文件,其中包含所有要应用的迁移。
感谢任何帮助
答案 0 :(得分:2)
您可以在 Meta 中设置 abstract=True
以防止模型迁移,如下所示:
class FieldOpsBooking(models.Model):
.....
class Meta:
abstract = True
.....
答案 1 :(得分:1)
我用 managed=False 的模型检查了我自己的项目:是的,迁移文件中有一个条目,例如:
operations = [
migrations.CreateModel(
name='xyz',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'db_table': 'xyz_table',
'managed': False,
},
),
但是:当您执行“makemigration”时,这不会在数据库级别创建新表。 对不起,如果坚持,但你原来的解决方案是绝对正确的!!
这是来自关于抽象基类的 django 文档: “...因为它是一个抽象基类。....并且不能被实例化或直接保存。”