Django: Как поместить исходные данные в базу данных перед миграцией? - PullRequest
0 голосов
/ 04 июля 2019

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

python3 -m pip install sqlparse

python3 manage.py makeemigations sbimage

// Я отредактировал сгенерированный файл 0002.

python3 manage.py Перенос изображения 0002

// Подтверждение нормальной работы.

python3 manage.py sqlmigrate thimage 0002

// Нормальная работа подтверждена.

Однако данные не вошли в таблицу при проверке базы данных.

from django.db import migrations, models

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.RunSQL("INSERT INTO AuthNumberR (id, auth_number_r) VALUES (2, 'c');"),
    ]

Ответы [ 2 ]

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

Я думаю, что вы не должны использовать голый SQL-запрос, вместо этого попробуйте использовать что-то вроде этого

from django.db import migrations

def combine_names(apps, schema_editor):
    # We can't import the Person model directly as it may be a newer
    # version than this migration expects. We use the historical version.
    Person = apps.get_model('yourappname', 'Person')
    for person in Person.objects.all():
        person.name = '%s %s' % (person.first_name, person.last_name)
        person.save()

class Migration(migrations.Migration):

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

    operations = [
        migrations.RunPython(combine_names),
    ]

Ссылка: https://docs.djangoproject.com/en/2.2/topics/migrations/#data-migrations

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

Вы можете использовать django fixtures , чтобы предоставить исходные данные для вашей базы данных.Это весьма полезно для вашего случая.

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