Django makemigrations 正在为 managed = False 的模型创建迁移

时间:2020-12-30 08:08:14

标签: python django

虽然 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 文件,其中包含所有要应用的迁移。

感谢任何帮助

2 个答案:

答案 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 文档: “...因为它是一个抽象基类。....并且不能被实例化或直接保存。”