7

When i do migration python manage.py makemigrations wall i see in console that Django (1.8.12) tells me a long list of fields that are touched:

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

...... ad so on, near all fileds that is ManyToManyField. I also checked other migrations, looks like random choose of fields, because i see also tagulous.models.fields.TagField and even models.TextField.

BUT, i am sure a did not changed that fields, even touched them

This is what in 0079_auto_20170302_0024.py for untouched fields:

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

The only thing i have done is added - Add field periodic_task_interval to userproject so other fields - why they appear in migration? Can this effect a long time doing actual migration because of big database?

Vic Nicethemer
  • 1,081
  • 3
  • 16
  • 38
  • Try running `sqlmigrate` and see what it says. Sometimes I have random migrations generated when I use something like `choices=a_dict.items()` and it returns the choices in a different order than before. Until Python 3.6, the order is undefined so this is expected behavior, I use `OrderedDict` for such things now. – Anonymous Mar 01 '17 at 23:44
  • 1
    @Anonymous ok, i have choices, but what about ManyToManyField - there is no any choices – Vic Nicethemer Mar 02 '17 at 08:19

1 Answers1

3

if you have choices= parametr in field, you should generate it in "stable way" (same order every time), for example with sorted()

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