@Boldy

Manage.py makemigrations создаёт неправильные миграции. Как исправить?

Добавил в модель три необязательных поля, но manage.py makemigrations создаёт миграции типа CreateTable (последних трёх полей в таблице нет, ) вместо AlterTable или AlterField:
migrations.CreateModel(
            name='InviteBonus',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('total', models.DecimalField(verbose_name='\u0421\u0443\u043c\u043c\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u0430', max_digits=12, decimal_places=2)),
                ('use_date', models.DateField(verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u0430')),
                ('line', models.PositiveIntegerField(null=True, verbose_name='\u043b\u0438\u043d\u0438\u044f', blank=True)),
                ('paid', models.BooleanField(default=False, verbose_name='\u0412\u044b\u043f\u043b\u0430\u0447\u0435\u043d\u043e')),
                ('five_per_period', models.BooleanField(default=False, verbose_name='\u043f\u044f\u0442\u044c \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434')),
                ('comment', models.CharField(max_length=100, verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439')),
                ('inviter', models.ForeignKey(related_name='invite_bonuses', default=None, verbose_name='\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a', to='accounts.TreeNode')),
                ('newbie', models.ForeignKey(related_name='awards', verbose_name='\u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0451\u043d\u043d\u044b\u0439', blank=True, to='accounts.TreeNode', null=True)),
            ],
            options={
                'db_table': 'invite_bonuses',
                'verbose_name': '\u0432\u044b\u043f\u043b\u0430\u0442\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0437\u0430 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435',
                'verbose_name_plural': '\u0432\u044b\u043f\u043b\u0430\u0442\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0437\u0430 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f',
            },
            bases=(models.Model,),
        ),


Что я делал:
- Удалял папку migrations
- Чистил таблицу django_migrations

Затем запускал
manage.py makemigrations
	manage.py migrate - FAKED, потому что таблица уже есть, поэтому нужно делать добавление полей вместо создания таблицы
	manage.py syncdb - Тоже ни о чём
  • Вопрос задан
  • 2807 просмотров
Решения вопроса 1
@kazmiruk
Все запутано, но судя по всему Django ведет себя верно: Вы удалили все миграции и теперь джанго думает, что миграций нет (и мало того они не накачены, так как Вы почистили таблицу). Именно поэтому она создает миграцию с create table, а не alter table. Как вариант исправления - восстановить миграцию, которая создает таблицу без добавленных 3х полей: можно удалить 3 поля из модели, создать миграцию, затем добавить их и создать вторую миграцию, добавить информацию о первой маиграции в django_migrations (как будто она накачена) и затем накатить через migrate вторую миграциюю.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Django не привязан к бд. Первая миграция всегда будет создавать новые таблицы из моделей.
migrations лучше не трогать и просто сопрождать с приложением.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы