import os import django import json from django.utils.text import slugify from tqdm import tqdm os.environ.setdefault("DJANGO_SETTINGS_MODULE", "car_inventory.settings") django.setup() from inventory.models import ( CarMake, CarModel, CarSerie, CarTrim, CarEquipment, CarSpecification, CarSpecificationValue, CarOption, CarOptionValue, ) def run(): with open("database_export.json", "r") as file: data = json.load(file) print("Starting data loading...") def generate_unique_slug(model, field_value, slug_field="slug"): base_slug = slugify(field_value) slug = base_slug counter = 1 while model.objects.filter(**{slug_field: slug}).exists(): slug = f"{base_slug}-{counter}" counter += 1 return slug # Step 1: Insert CarMake for item in tqdm(data["car_make"], desc="Inserting CarMake"): if not CarMake.objects.filter(id_car_make=item["id_car_make"]).exists(): unique_slug = generate_unique_slug(CarMake, item["name"]) CarMake.objects.create( id_car_make=item["id_car_make"], name=item["name"], # Uncomment if needed: # arabic_name=item.get("arabic_name", ""), # logo=item.get("Logo", ""), # is_sa_import=item.get("is_sa_import", False), slug=unique_slug, ) # Step 2: Insert CarModel for item in tqdm(data["car_model"], desc="Inserting CarModel"): if not CarModel.objects.filter(id_car_model=item["id_car_model"]).exists(): # Check if related make exists if CarMake.objects.filter(id_car_make=item["id_car_make"]).exists(): unique_slug = generate_unique_slug(CarModel, item["name"]) CarModel.objects.create( id_car_model=item["id_car_model"], id_car_make_id=item["id_car_make"], name=item["name"], # arabic_name=item.get("arabic_name", ""), slug=unique_slug, ) # Step 3: Insert CarSerie for item in tqdm(data["car_serie"], desc="Inserting CarSerie"): if not CarSerie.objects.filter(id_car_serie=item["id_car_serie"]).exists(): # Check if related model exists if CarModel.objects.filter(id_car_model=item["id_car_model"]).exists(): unique_slug = generate_unique_slug(CarSerie, item["name"]) CarSerie.objects.create( id_car_serie=item["id_car_serie"], id_car_model_id=item["id_car_model"], name=item["serie_name"], # arabic_name=item.get("arabic_name", ""), year_begin=item.get("year_begin"), year_end=item.get("year_end"), generation_name=item.get("generation_name", ""), slug=unique_slug, ) # Step 4: Insert CarTrim for item in tqdm(data["car_trim"], desc="Inserting CarTrim"): if not CarTrim.objects.filter(id_car_trim=item["id_car_trim"]).exists(): # Check if related serie exists if CarSerie.objects.filter(id_car_serie=item["id_car_serie"]).exists(): unique_slug = generate_unique_slug(CarTrim, item["name"]) CarTrim.objects.create( id_car_trim=item["id_car_trim"], id_car_serie_id=item["id_car_serie"], name=item["name"], # arabic_name=item.get("arabic_name", ""), start_production_year=item["start_production_year"], end_production_year=item["end_production_year"], slug=unique_slug, ) # Step 5: Insert CarEquipment for item in tqdm(data["car_equipment"], desc="Inserting CarEquipment"): if not CarEquipment.objects.filter( id_car_equipment=item["id_car_equipment"] ).exists(): if CarTrim.objects.filter(id_car_trim=item["id_car_trim"]).exists(): unique_slug = generate_unique_slug(CarEquipment, item["name"]) CarEquipment.objects.create( id_car_equipment=item["id_car_equipment"], id_car_trim_id=item["id_car_trim"], name=item["name"], year_begin=item.get("year"), slug=unique_slug, ) # Step 6: Insert CarSpecification (Parent specifications first) parent_specs = [ item for item in data["car_specification"] if item["id_parent"] is None ] child_specs = [ item for item in data["car_specification"] if item["id_parent"] is not None ] for item in tqdm(parent_specs, desc="Inserting Parent CarSpecifications"): if not CarSpecification.objects.filter( id_car_specification=item["id_car_specification"] ).exists(): CarSpecification.objects.create( id_car_specification=item["id_car_specification"], name=item["name"], # arabic_name=item.get("arabic_name", ""), id_parent_id=None, ) for item in tqdm(child_specs, desc="Inserting Child CarSpecifications"): if not CarSpecification.objects.filter( id_car_specification=item["id_car_specification"] ).exists(): # Check if parent exists if CarSpecification.objects.filter( id_car_specification=item["id_parent"] ).exists(): CarSpecification.objects.create( id_car_specification=item["id_car_specification"], name=item["name"], # arabic_name=item.get("arabic_name", ""), id_parent_id=item["id_parent"], ) # Step 7: Insert CarSpecificationValue for item in tqdm( data["car_specification_value"], desc="Inserting CarSpecificationValue" ): if not CarSpecificationValue.objects.filter( id_car_specification_value=item["id_car_specification_value"] ).exists(): # Check if related objects exist if ( CarTrim.objects.filter(id_car_trim=item["id_car_trim"]).exists() and CarSpecification.objects.filter( id_car_specification=item["id_car_specification"] ).exists() ): CarSpecificationValue.objects.create( id_car_specification_value=item["id_car_specification_value"], id_car_trim_id=item["id_car_trim"], id_car_specification_id=item["id_car_specification"], value=item["value"], unit=item.get("unit", ""), ) # Step 8: Insert CarOption (Parent options first) parent_options = [item for item in data["car_option"] if item["id_parent"] is None] child_options = [ item for item in data["car_option"] if item["id_parent"] is not None ] for item in tqdm(parent_options, desc="Inserting Parent CarOptions"): if not CarOption.objects.filter(id_car_option=item["id_car_option"]).exists(): CarOption.objects.create( id_car_option=item["id_car_option"], name=item["name"], # arabic_name=item.get("arabic_name", ""), id_parent_id=None, ) for item in tqdm(child_options, desc="Inserting Child CarOptions"): if not CarOption.objects.filter(id_car_option=item["id_car_option"]).exists(): # Check if parent exists if CarOption.objects.filter(id_car_option=item["id_parent"]).exists(): CarOption.objects.create( id_car_option=item["id_car_option"], name=item["name"], # arabic_name=item.get("arabic_name", ""), id_parent_id=item["id_parent"], ) # Step 9: Insert CarOptionValue for item in tqdm(data["car_option_value"], desc="Inserting CarOptionValue"): if not CarOptionValue.objects.filter( id_car_option_value=item["id_car_option_value"] ).exists(): # Check if related objects exist if ( CarEquipment.objects.filter( id_car_equipment=item["id_car_equipment"] ).exists() and CarOption.objects.filter( id_car_option=item["id_car_option"] ).exists() ): CarOptionValue.objects.create( id_car_option_value=item["id_car_option_value"], id_car_option_id=item["id_car_option"], id_car_equipment_id=item["id_car_equipment"], is_base=item["is_base"], ) print("Data population completed successfully.") if __name__ == "__main__": run()