Наполнение базы данных исходными данными в Django

Мне нужен способ заполнить db начальными данными (городами) для моих рефов. Я пытался сделать это через миграции (https://docs.djangoproject.com/en/4.0/topics/migrations/#data-migrations)
. Не уверен, что это лучший способ, так как теперь я внес изменения в этот файл после миграции и не могу применить его снова, как и не могу откатить его назад (после операции ...populate_cities... is not reversible) и применить снова.
. Поэтому вопросы следующие:

  1. есть ли способ откатить такую миграцию назад (возможно, вручную)?
  2. может быть есть лучший способ заполнения базы данных такими данными
  3. .

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

Пример из документации:

from django.db import migrations

def forwards_func(apps, schema_editor):
    # We get the model from the versioned app registry;
    # if we directly import it, it'll be the wrong version
    Country = apps.get_model("myapp", "Country")
    db_alias = schema_editor.connection.alias
    Country.objects.using(db_alias).bulk_create([
        Country(name="USA", code="us"),
        Country(name="France", code="fr"),
    ])

def reverse_func(apps, schema_editor):
    # forwards_func() creates two Country instances,
    # so reverse_func() should delete them.
    Country = apps.get_model("myapp", "Country")
    db_alias = schema_editor.connection.alias
    Country.objects.using(db_alias).filter(name="USA", code="us").delete()
    Country.objects.using(db_alias).filter(name="France", code="fr").delete()

class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.RunPython(forwards_func, reverse_func),
    ]

В основном, вам нужна обратная функция, которая во многих случаях может быть простой:

def reverse_func(apps, schema_editor):
    pass
Вернуться на верх