【问题标题】:Why Django migration alter field (AlterField) that is not touched?为什么django迁移alter field(AlterField)没有被触及?
【发布时间】:2017-07-21 10:33:08
【问题描述】:

当我进行迁移时python manage.py makemigrations wall 我在控制台中看到 Django (1.8.12) 告诉我一长串被触及的字段:

Migrations for 'wall':
  0079_auto_20170302_0024.py:
    - Add field periodic_task_interval to userproject
    - Alter field bank_problems on bankireference
    - Alter field bank_problems_category on bankireference
    - Alter field bank_products on bankireference
    - Alter field bank_products_category on bankireference
    - Alter field extr_category on bankireference
    - Alter field extr_words on bankireference
    - Alter field neg_features on bankireference
    - Alter field neutral_features on bankireference
    - Alter field pos_features on bankireference
    - Alter field tonality_category on bankireference
    - Alter field tonality_words on bankireference
    - Alter field bank_problems on fbpagepost
    - Alter field bank_problems_category on fbpagepost
    - Alter field bank_products on fbpagepost
    - Alter field bank_products_category on fbpagepost
    - Alter field extr_category on fbpagepost

......广告等等,靠近所有字段,即ManyToManyField。我还检查了其他迁移,看起来像是随机选择的字段,因为我也看到了tagulous.models.fields.TagField 乃至 models.TextField.

但是,我确信 a 没有改变那些字段,甚至没有触及它们

这是 0079_auto_20170302_0024.py 中未触及字段的内容:

......
    migrations.AlterField(
        model_name='userproject',
        name='description',
        field=models.TextField(default='', verbose_name='Description', blank=True, null=True),
    ),
......

我唯一做的就是添加- Add field periodic_task_interval to userproject 所以其他字段 - 为什么它们出现在迁移中? 由于大数据库,这会影响长时间进行实际迁移吗?

【问题讨论】:

  • 尝试运行sqlmigrate 看看它会说什么。有时,当我使用 choices=a_dict.items() 之类的东西时会生成随机迁移,它会以与以前不同的顺序返回选择。在 Python 3.6 之前,订单是未定义的,所以这是预期的行为,我现在使用 OrderedDict 来处理这些事情。
  • @Anonymous 好的,我有选择,但是 ManyToManyField 呢 - 没有任何选择

标签: python django django-migrations


【解决方案1】:

如果你在字段中有选择=参数,你应该以“稳定的方式”(每次相同的顺序)生成它,例如使用 sorted()

TYPES = {
    'DISTRICT': 'Округ',
    'AREA': 'Район',
    'STATION': 'Станция метро',
}
type = models.CharField(
    max_length=255,
    choices=sorted(TYPES.items()),
    default='AREA',
)

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2020-04-05
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多