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