Джанго: В этой ситуации, как я могу мигрировать? мигрировать не работает - PullRequest
1 голос
/ 05 июля 2019

Во-первых, существующая модель находится в '0001_initial.py'.

После добавления «моделей», которые я добавила, и когда я делала «makemigrations», она переходит в «0002_xxx.py».

Мне удалось выполнить миграцию, и с базой данных проблем не возникло.

А потом, когда были добавлены эти «модели», я захотел поместить исходные данные в базу данных.

поэтому я создал папку для фиксации для ввода исходных данных после выполнения миграций.

Я поместил в нее файл json.

Однако, когда я изменил название 'model' и сделал 'makemigrations'снова у меня возникла ошибка при поиске таблицы.

Поэтому я сразу перешел на sqlite и стер все таблицы на новых моделях.

Затем я сделал миграцию.

После этого,

python3 manage.py migrate sbimage

Когда я выполняю здесь 'миграцию', как это,

django.db.utils.OperationalError: table "sbimage_camerathreshold" already exists

Есть такая ошибка.

python3 manage.py migrate sbimage --fake

Это сделало 0001, 0002 «FAKED».

Это мой файл 0002 был создан после «makemigrations».

from django.db import migrations, models

def load_my_initial_data(apps, schema_editor):
    call_command("loaddata", "addition.json")

class Migration(migrations.Migration):

    dependencies = [
        ('sbimage', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='AuthNumberR',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('auth_number_r', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='AuthNumberT',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('auth_number_t', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='Claimant',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('claimant', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='CountryOfOrigin',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('country_of_origin', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='EquipmentName',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('equipment_name', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='FccId',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('fcc_id', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='Manufacturer',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('manufacturer', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='NbId',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nb_id', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='Publisher',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('publisher', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='WarningStateList',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('warning', models.CharField(max_length=4096)),
            ],
        ),
        migrations.CreateModel(
            name='WifiWarningStateList',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('wifi_warning', models.CharField(max_length=4096)),
            ],
        ),
        migrations.RunPython(load_my_initial_data),
    ]

Как создать таблицу вновь созданных моделей вэта ситуация?

  • Этот код не работает вообще.

    python3 manage.py migrate sbimage 0002

    Запуск миграций: миграции не применяются.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы НИКОГДА не должны пытаться манипулировать своей базой данных напрямую, в то время как вы используете кодовый подход для своей базы данных.Что касается вашей проблемы, то ваша миграция не применяется, потому что миграции всегда применяются в последовательности.Предположим, у вас есть 6 миграций, в которые вы уже мигрировали, а затем вы создадите 7-ю миграцию, и эта миграция проверит, синхронизируются ли ваши предыдущие миграции с вашей базой данных.В вашем случае, жесткое кодирование базы данных напрямую вызвало расхождение в вашей модели.Самый простой способ задействовать вас:

  1. Удаление папки миграции из приложения django.
  2. Удаление всех данных из таблицы миграции в вашей базе данных.
  3. python manage.py makemigrations
  4. python manage.py migrate --fake

После этого вы можете повторно применить свои миграции для синхронизации вашей модели с базой данных.

0 голосов
/ 05 июля 2019

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

Вы можете восстановить базу данных с помощью команды migration.

./manage.py migrate my_app 00xx_migration_file_you_want_to_revert_to.py

Пока удалите все файлы миграции и повторите команду makemigration и migrate.

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