'Error loading existing db data into Django (fixtures, postgresql)

Am trying to load some generated data into Django without disrupting the existing data in the site. What I have:

  1. Saved the data as a valid JSON (validated here).
  2. 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).

Output errors I'm receiving are very generic and not helpful, even with verbosity=3.

The Error Prompt

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': 

auto_2022_migration.py file:

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 file extract (start... end)

NB: all my PKs are UUIDs generated from 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":""}}]


Solution 1:[1]

I'm not sure what the original error was. I suspect it had to do with either editing the table/schema using psql separately from Django, OR using the somewhat outdated uuid-ossp package instead of pgcrypto package (native to Djagno via CryptoExtension()). I was never able to confirm. I did however manage to get it working by:

  1. Deleting the table (schema, data) using psql and the app using Django. Creating a new app in Django.
  2. Load the prev model data into this new_app/models.py. Make new migration file, first updating the CryptoExtension() operation before committing the migration.
  3. Create Fixtures directory and relevant file (per Django specs, validated JSON online.
  4. Validate my UUIDs online
  5. Load the fixture data into the app. python3 manage.py loaddata /path/to/data/file_name.json

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Heartthrob_Rob