Django Adding Default Data After Migrations
Django Adding default data After Migrations#
We are talking
RunPython here not fixtures.
Django Fixures are used to created initial data for models - however they are not automatically run as part of migrations.
Create an empty migration (remember to have already created the migrations for the table you are adding default data for)
./manage.py makemigrations <app_name> --empty -n <name_of_migration>
It will probably already have a dependency of the previous migration
Acquire the model with:
ModelName = apps.get_model("<app_name>", "<model_name>")
Then do actions on it much like in the docs:
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), ]