Бывают случаи, когда вам нужно предварительно заполнить свою базу данных некоторыми жестко закодированными данными, когда вы впервые настраиваете приложение Django. Есть два основных способа предоставить исходные данные вашим моделям Django.
- Предоставление исходных данных при миграциях
- Предоставление данных с приборами
Здесь мы обсудим оба способа заполнения данных в нашей базе данных. Во-первых, 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.