opbeans/migrations/0002_import_data.py (43 lines of code) (raw):

import subprocess import os import json from django.conf import settings from django.db import migrations def load_fixture(apps, schema_editor): _get_model = apps.get_model models = { _get_model("opbeans.customer"): [], _get_model("opbeans.producttype"): [], _get_model("opbeans.product"): [], _get_model("opbeans.order"): [], _get_model("opbeans.orderline"): [], } renames = { "order": "order_id", "customer": "customer_id", "product_type": "product_type_id", "product": "product_id", } file = os.path.join(settings.BASE_DIR, "opbeans/migrations/initial_data.json") try: subprocess.check_call(["bunzip2", "-k", file + ".bz2"]) with open(file) as f: data = json.load(f) for item in data: model = _get_model(item["model"]) for orig, rename in renames.items(): if orig in item["fields"]: item["fields"][rename] = item["fields"].pop(orig) models[model].append(model(id=item["pk"], **item["fields"])) for model, bulk_list in models.items(): model.objects.bulk_create(bulk_list) finally: if os.path.exists(file): os.unlink(file) class Migration(migrations.Migration): dependencies = [ ("opbeans", "0001_initial") ] operations = [ migrations.RunPython(load_fixture), ]