【问题标题】:Django migration would delete important tableDjango迁移会删除重要表
【发布时间】:2020-08-14 14:19:41
【问题描述】:

简短版本: Django 的迁移子系统似乎想要删除并重新创建我的表,而不仅仅是添加一列。我该如何解决?

长版:

我想向我的 Django 3.0 模型之一添加一个字段。没什么大不了的,对吧?

  1. 在类定义中添加字段
  2. manage.py makemigrations
  3. manage.py migrate

所以有一个奇怪的问题....当我运行 makemigrations 时,我在输出中看到了这个:

Migrations for 'api':
  api/migrations/0006_auto_20200814_0953.py
    - Delete model APISearch
[snip]
    - Create model APISearch
[snip]

果然,生成的迁移中有说明删除然后创建APISearch 模型。

那会很糟糕...APISearch 是我数据库中的一个真实表,包含重要数据。

我认为这个问题与很久以前APISearch 是一个代理类(它早已被更改为一个具体类)这一事实有关。我不知道 Django 是如何确定代理性的,所以我可以纠正它。

【问题讨论】:

    标签: django-migrations


    【解决方案1】:

    我想我找到了解决办法。

    1. 编辑最初创建类的迁移:
        operations = [
            migrations.CreateModel(
                name='APISearch',
                fields=[
                ],
                options={
                    'proxy': True,    # explicitly set this to False
                    'indexes': [],
                },
                bases=('foo.search',),
            ),
        ]
    
    1. 创建一个空迁移,并使用AddField 方法做我想做的事
        operations = [
            migrations.AddField(
                model_name='apisearch',
                name='my_new_field',
                field=models.NullBooleanField(blank=True, null=True),
            ),
        ]
    

    【讨论】:

      猜你喜欢
      • 2014-12-30
      • 2018-12-15
      • 1970-01-01
      • 2020-12-01
      • 2016-10-02
      • 2020-01-19
      • 2019-12-16
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多