import os import django import json 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...") # Step 1: Insert CarMake for item in tqdm(data["car_make"], desc="Inserting CarMake"): CarMake.objects.update_or_create( id_car_make=item["id_car_make"], defaults={ "name": item["name"], # "arabic_name": item.get("arabic_name", ""), # "logo": item.get("Logo", ""), # "is_sa_import": item.get("is_sa_import", False), } ) # Step 2: Insert CarModel for item in tqdm(data["car_model"], desc="Inserting CarModel"): CarMake.objects.get(id_car_make=item["id_car_make"]) CarModel.objects.update_or_create( id_car_model=item["id_car_model"], defaults={ "id_car_make_id": item["id_car_make"], "name": item["name"], # "arabic_name": item.get("arabic_name", ""), } ) # Step 3: Insert CarSerie for item in tqdm(data["car_serie"], desc="Inserting CarSerie"): CarModel.objects.get(id_car_model=item["id_car_model"]) CarSerie.objects.update_or_create( id_car_serie=item["id_car_serie"], defaults={ "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", ""), } ) # Step 4: Insert CarTrim for item in tqdm(data["car_trim"], desc="Inserting CarTrim"): CarSerie.objects.get(id_car_serie=item["id_car_serie"]) CarTrim.objects.update_or_create( id_car_trim=item["id_car_trim"], defaults={ "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"], } ) # Step 5: Insert CarEquipment for item in tqdm(data["car_equipment"], desc="Inserting CarEquipment"): CarTrim.objects.get(id_car_trim=item["id_car_trim"]) CarEquipment.objects.update_or_create( id_car_equipment=item["id_car_equipment"], defaults={ "id_car_trim_id": item["id_car_trim"], "name": item["name"], "year_begin": item.get("year"), } ) # 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"): CarSpecification.objects.update_or_create( id_car_specification=item["id_car_specification"], defaults={ "name": item["name"], # "arabic_name": item.get("arabic_name", ""), "id_parent_id": None } ) for item in tqdm(child_specs, desc="Inserting Child CarSpecifications"): CarSpecification.objects.get(id_car_specification=item["id_parent"]) CarSpecification.objects.update_or_create( id_car_specification=item["id_car_specification"], defaults={ "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"): CarTrim.objects.get(id_car_trim=item["id_car_trim"]) CarSpecification.objects.get(id_car_specification=item["id_car_specification"]) CarSpecificationValue.objects.update_or_create( id_car_specification_value=item["id_car_specification_value"], defaults={ "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"): CarOption.objects.update_or_create( id_car_option=item["id_car_option"], defaults={ "name": item["name"], # "arabic_name": item.get("arabic_name", ""), "id_parent_id": None } ) for item in tqdm(child_options, desc="Inserting Child CarOptions"): CarOption.objects.get(id_car_option=item["id_parent"]) CarOption.objects.update_or_create( id_car_option=item["id_car_option"], defaults={ "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"): CarEquipment.objects.get(id_car_equipment=item["id_car_equipment"]) CarOption.objects.get(id_car_option=item["id_car_option"]) CarOptionValue.objects.update_or_create( id_car_option_value=item["id_car_option_value"], defaults={ "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()