为什么 Django 迁移更改字段(AlterField)没有被触及?

Vic*_*mer 6 python django django-migrations

当我进行迁移时,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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Rya*_*der 3

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

\n\n
TYPES = {\n    \'DISTRICT\': \'\xd0\x9e\xd0\xba\xd1\x80\xd1\x83\xd0\xb3\',\n    \'AREA\': \'\xd0\xa0\xd0\xb0\xd0\xb9\xd0\xbe\xd0\xbd\',\n    \'STATION\': \'\xd0\xa1\xd1\x82\xd0\xb0\xd0\xbd\xd1\x86\xd0\xb8\xd1\x8f \xd0\xbc\xd0\xb5\xd1\x82\xd1\x80\xd0\xbe\',\n}\ntype = models.CharField(\n    max_length=255,\n    choices=sorted(TYPES.items()),\n    default=\'AREA\',\n)\n
Run Code Online (Sandbox Code Playgroud)\n