223 lines
8.9 KiB
Python
223 lines
8.9 KiB
Python
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()
|