【问题标题】:Django makemigrations is creating migrations for model with managed = FalseDjango makemigrations 正在为 managed = False 的模型创建迁移
【发布时间】:2021-04-06 18:35:14
【问题描述】:

虽然 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'

我在做迁移后得到了这个 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 文件,其中包含所有要应用的迁移。

感谢任何帮助

【问题讨论】:

  • 您可以在 Meta 中使用 abstract=True。我认为这应该可行。
  • @AjayLingayat 有效,将其添加为答案
  • 请查看 0001_initial.py 并检查是否生成了新表 - 我猜不是,因为您的代码似乎正确
  • @Razenstein 是的,在 0001_initial.py 中创建了一个新表。正如 Ajay Lingayat 评论的那样,添加 abstract = True,它工作正常。不创建任何迁移
  • 一旦你根据你的抽象类定义了一个“真实”的类,你就会遇到同样的问题!您是否在没有 managed=false 的情况下进行了第一次 makemigrations?

标签: python django


【解决方案1】:

您可以在 Meta 中设置abstract=True 以防止模型迁移,如下所示:

class FieldOpsBooking(models.Model):
   .....
   class Meta:
       abstract = True
   ..... 

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我明白了,现在看到了,并尝试迁移,不影响原始数据库
    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 2014-11-19
    • 2018-03-22
    • 2017-09-15
    • 1970-01-01
    • 2016-11-14
    • 2017-11-18
    • 2016-10-25
    相关资源
    最近更新 更多