Makemigration - Создание модели и вставка данных только один раз
У меня есть модель, как показано ниже:
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()
Теперь каждый раз, когда я выполняю следующую команду:
python manage.py makemigrations
В первый раз он создает таблицу и заполняет ее. Второй, третий и так далее раз, он продолжает вставлять одни и те же данные (определенно возможно, что я буду использовать команду makemigration много раз, поэтому я не хочу, чтобы она вставляла их каждый раз, когда выполняется команда)
Есть ли способ достичь этого? Создать и вставить один раз?
Вы можете добавить миграции данных , которые создают данные, они запускаются один раз, когда применяется миграция. Это пример, когда миграция данных добавляется к миграции, которая также добавляет модель
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),
]