Бывают случаи, когда вам нужно предварительно заполнить свою базу данных некоторыми жестко закодированными данными, когда вы впервые настраиваете приложение Django. Есть два основных способа предоставить исходные данные вашим моделям Django.

  1. Предоставление исходных данных при миграциях
  2. Предоставление данных с приборами

Здесь мы обсудим оба способа заполнения данных в нашей базе данных. Во-первых, Django не может автоматически генерировать миграции данных для вас, как это происходит с миграциями схем, но написать их не так уж сложно. Файлы миграции в Django состоят из операций, и основная операция, которую вы используете для миграции данных, - это RunPython. Например, у нас есть простое приложение с именем Person и в качестве модели Автор.

После написания моделей создайте схему с помощью команды makemigrations. Теперь давайте напишем перенос, который заполняет first_name модели Автор. Все, что нам нужно сделать, это использовать RunPython в только что созданном файле миграции.

from django.db import migrations, models
def populate_names(apps, schema_editor):
    names = ["Suyoj", "Sanjay", "Sangeeta"]                               
    Author = apps.get_model('person', 'Author')
    for name in names:
        obj = Author(first_name=name)
        obj.save()
class Migration(migrations.Migration):
    initial = True
    dependencies = [
                   ]
    operations = [
                 migrations.CreateModel(
                 name='Author',
                 fields=[
                 ('id', models.AutoField(auto_created=True,                primary_key=True,serialize=False, verbose_name='ID')),
                ('first_name', models.CharField(max_length=100)),
                ],
                 options={
                'db_table': 'Author',
            },
        ),
   migrations.RunPython(populate_names),  #Just add this line
    ]

Как только это будет сделано, мы сможем запустить python manage.py migrate как обычно, и перенос данных будет выполняться одновременно с другими миграциями.

Во-вторых, вы также можете предоставить данные с помощью приспособлений. Приспособление - это набор данных, которые Django знает, как импортировать в базу данных. Самый простой способ создать фикстуру, если у вас уже есть некоторые данные, - это использовать команду manage.py dumpdata. Или вы можете написать фикстуры от руки; фикстуры могут быть записаны как документы JSON, XML или YAML (с установленным PyYAML). Однако, в качестве примера, вот как может выглядеть прибор для модели Author в JSON:

# (data.json)
[
  {
    "model": "person.author",      # "model" : "app_name.model_name"
    "pk": 4,
    "fields": {
      "first_name": "Sonika"
    }
  },
  {
    "model": "person.author",
    "pk": 5,
    "fields": {
      "first_name": "Ashish"
    }
  }
]
#Command : python manage.py loaddata data.json

Вы можете загрузить данные, вызвав manage.py loaddata ‹fixturename›, где ‹fixturename› - это имя созданного вами файла фикстуры. Каждый раз, когда вы запускаете loaddata, данные будут считываться из прибора и повторно загружаться в базу данных.

По умолчанию Django ищет фикстуры в каталоге fixtures внутри каждого приложения. Вы можете установить параметр FIXTURE_DIRS на список дополнительных каталогов, в которых должен искать Django.

Таким образом, мы можем предварительно заполнить данные в наших моделях в Django.