Как загрузить данные существующей базы данных в Djano (фиксы, postgresql)
Я пытаюсь загрузить некоторые сгенерированные данные в Django, не нарушая существующие данные на сайте. Что у меня есть:
- Saved the data as a valid JSON (validated here).
- The JSON format matches the Django documentation. In previous attempts I also aligned it to the Django documentation here (slightly different field order, the result was the same).
Ошибки вывода, которые я получаю, очень общие и не помогают, даже при использовании verbosity=3.
файлauto_2022_migration.py:
from django.db import migrations
from django.core.management import call_command
def db_migration(apps, schema_editor):
call_command('loaddata', '/filename.json', verbosity=3)
class Migration(migrations.Migration):
dependencies = [('workoutprogrammes', '0004_extable_delete_ex_table'),]
operations = [migrations.RunPython(db_migration),]
JSON извлечение файла (начало... конец)
NB: все мои PK являются UUID, сгенерированными из postgresql
[{"pk":"af82d5f4-2814-4d52-b2b1-6add6cf18d3c","model":"workoutprogrammes.ex_table","fields":{"exercise_name":"Cable Alternating Front Raise","utility":"Auxiliary","mechanics":"Isolated","force":"Push","levator_scapulae":"Stabilisers",..."obliques":"Stabilisers","psoas_major":""}}]
Подсказка об ошибке
Operations to perform:
Apply all migrations: workoutprogrammes
Running migrations:
Applying workoutprogrammes.0005_auto_20220415_2021...Loading '/Users/Robert/Desktop/Projects/Powerlifts/src/workoutprogrammes/fixtures/datafile_2' fixtures...
Checking '/Users/Robert/Desktop/Projects/Powerlifts/src/workoutprogrammes/fixtures' for fixtures...
Installing json fixture 'datafile_2' from '/Users/Robert/Desktop/Projects/Powerlifts/src/workoutprogrammes/fixtures'.
Traceback (most recent call last):
File "/Users/Robert/Desktop/Projects/Powerlifts/venv/lib/python3.8/site-packages/django/core/serializers/json.py", line 70, in Deserializer
yield from PythonDeserializer(objects, **options)
File "/Users/Robert/Desktop/Projects/Powerlifts/venv/lib/python3.8/site-packages/django/core/serializers/python.py", line 93, in Deserializer
Model = _get_model(d["model"])
KeyError: 'model'
The above exception was the direct cause of the following exception:... text continues on...
for obj in objects:
File "/Users/Robert/Desktop/Projects/Powerlifts/venv/lib/python3.8/site-packages/django/core/serializers/json.py", line 74, in Deserializer
raise DeserializationError() from exc
django.core.serializers.base.DeserializationError: Problem installing fixture '/Users/Robert/Desktop/Projects/Powerlifts/src/workoutprogrammes/fixtures/datafile_2.json':
Я не уверен, в чем заключалась первоначальная ошибка. Я подозреваю, что она была связана либо с редактированием таблицы/схемы с помощью psql отдельно от Django, либо с использованием несколько устаревшего пакета uuid-ossp вместо пакета pgcrypto (встроенного в Djagno через CryptoExtension()). Я так и не смог подтвердить это. Однако мне удалось заставить его работать с помощью:
- Удаление таблицы (схемы, данных) с помощью psql и приложения с помощью Django. Создаем новое приложение в Django.
- Загрузите данные предыдущей модели в это
new_app/models.py. Создайте новый файл миграции, сначала обновив операциюCryptoExtension()перед фиксацией миграции. - Создайте каталог Fixtures и соответствующий файл ( согласно спецификациям Django, валидированный JSON online.
- Валидируйте мои UUID online .
- Загрузите данные приспособления в приложение.
python3 manage.py loaddata /path/to/data/file_name.json