Tengo un modelo como el siguiente:
from django.db import models class Country(models.Model): cid = models.SmallAutoField(primary_key=True) label = models.CharField(max_length=100) abbr = models.CharField(max_length=3) countries = { "AFG": "Afghanistan", "ALB": "Albania", "DZA": "Algeria", "ASM": "American Samoa", "AND": "Andorra", "AGO": "Angola", "AIA": "Anguilla" }; for c in countries: row = Country(label = countries[c], abbr = c) row.save()Ahora cada vez que ejecuto el siguiente comando:
python manage.py makemigrationsLa primera vez, crea la tabla y la rellena. La segunda, la tercera y así sucesivamente, sigue insertando los mismos datos (definitivamente es posible que use el comando makemigration muchas veces, así que no quiero que lo inserte cada vez que se ejecuta el comando)
¿Alguna forma de lograr esto? ¿Crear e insertar una vez?
Puede agregar migraciones de datos que crean datos, estos se ejecutan una vez cuando se aplica la migración. Este es un ejemplo donde su migración de datos se agrega a la migración que también agrega el modelo
from django.db import migrations, models countries = { "AFG": "Afghanistan", "ALB": "Albania", "DZA": "Algeria", "ASM": "American Samoa", "AND": "Andorra", "AGO": "Angola", "AIA": "Anguilla" } def create_countries(apps, schema_editor): Country = apps.get_model('myapp', 'Country') for c in countries: Country.objects.create(label=countries[c], abbr=c) class Migration(migrations.Migration): dependencies = [ ('myapp', '0000_previous'), ] operations = [ migrations.CreateModel( name='Country', fields=[ ('cid', models.SmallAutoField(primary_key=True, serialize=False)), ('label', models.CharField(max_length=100)), ('abbr', models.CharField(max_length=3)), ], ), migrations.RunPython(create_countries), ]