Сделайте Миграции на Django - PullRequest
1 голос
/ 01 марта 2020

У меня есть Django модель, которая выглядит следующим образом

class RedUsers(BaseModel):
    user_email = models.EmailField(null=True, blank=True)
    user_name = models.CharField(max_length=30, null=True, blank=True)
    red_id = models.CharField(max_length=30, null=True, blank=True)
    active = models.BooleanField(default=False)

    def __str__(self):
        return self.user_email

    class Meta:
        verbose_name_plural = "Red Users"

Я хочу добавить новое поле

activation_key = models.CharField(max_length=40, null=True, blank=True)

У меня уже есть много данных в этой модели, и я не могу удалить таблицу, поэтому мне нужно выполнить миграцию вручную.

Я попытался добавить модель из моего файла 0001_initial.py без удачи

class Migration(migrations.Migration): 
    initial = True

    dependencies = [] 

    operations = [ 
        migrations.CreateModel(
            name='RedUsers',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created', models.DateTimeField(auto_now_add=True)),
                ('modified', models.DateTimeField(auto_now=True)),
                ('user_email', models.EmailField(blank=True, max_length=254, null=True)),
                ('user_name', models.CharField(blank=True, max_length=30, null=True)),
                ('red_id', models.CharField(blank=True, max_length=30, null=True)),
                ('active', models.BooleanField(default=False)),
            ],
            options={
                'verbose_name_plural': 'RED Users',
            },
        ),
         migrations.AddField(
            model_name='redusers',
            name='activation_key',
            field=models.CharField(blank=True, max_length=40, null=True, verbose_name='activation key'),
        ),
    ] 

Когда я запускаю python manage.py migrate

В нем говорится, что в ваших моделях есть изменения, которые еще не отражены в миграции, и поэтому они не будут применены.

Я не знаю, что еще делать

1 Ответ

0 голосов
/ 01 марта 2020

Я хочу добавить новое поле

activation_key = models.CharField(max_length=40, null=True, blank=True)

У меня уже есть много данных в этой модели, и я не могу удалить таблицу, поэтому мне нужно выполнить миграцию вручную.

Вам не нужно. Если вы запустите makemigrations во второй раз, Django обнаружит, что вы добавили поле, и создаст дополнительный файл миграции для добавления этого поля в модель.

Таким образом, вам лучше удалить AddField перенести объект из файла миграции и запустить python3 manage.py makemigrations.

Он создаст новый файл, который, вероятно, будет начинаться с 0002_….py, и примет первую миграцию в качестве зависимости.

Затем можно запустить python3 manage.py migrate, и Django добавит поле на уровне базы данных и вставит имя миграции в таблицу миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...