import random from django.core.management.base import BaseCommand from django.core.exceptions import ValidationError from django.db import IntegrityError from faker import Faker from fleet.models import Vozilo class Command(BaseCommand): help = 'Popunjava bazu podataka s gospodarskim vozilima sinkronizirano s Astro logistikom' def add_arguments(self, parser): parser.add_argument( 'total', type=int, help='Broj vozila koje želiš kreirati', default=5 ) def handle(self, *args, **kwargs): total = kwargs['total'] fake = Faker(['hr_HR']) # Modeli koji odgovaraju tvom voznom parku za mobilne servisne timove modeli_podaci = [ 'VW Transporter T6', 'Mercedes-Benz Vito', 'Citroen Jumper', 'Ford Transit Custom', 'Renault Kangoo Maxi', 'Peugeot Boxer', 'Opel Vivaro', ] self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Kreiram {total} servisnih vozila u flotu...')) brojac = 0 maksimalni_pokusaji = total * 5 pokusaji = 0 while brojac < total and pokusaji < maksimalni_pokusaji: pokusaji += 1 model_naziv = random.choice(modeli_podaci) # Generiranje realistične registracije u formatu: ZG 1234-AB gradovi = ['ZG', 'KR', 'KA', 'ST', 'RI', 'OS', 'VZ', 'PU'] grad = random.choice(gradovi) reg_broj = fake.numerify(text=random.choice(['###', '####'])) reg_slova = fake.bothify(text=random.choice(['?', '??']), letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ') registracija = f"{grad} {reg_broj}-{reg_slova}" # Kilometraža: Trenutni kilometri moraju pratiti povijest korištenja vozila pocetni = random.randint(10000, 220000) dodatni = random.randint(1500, 45000) trenutni = pocetni + dodatni # POPRAVLJENO: Koristimo mala slova sukladno tvojim Choice ograničenjima u modelu status_izbor = random.choice(['aktivan', 'aktivan', 'servis', 'neaktivan']) try: # Provjeravamo postoji li već ova registracija u bazi unaprijed if Vozilo.objects.filter(registracija=registracija).exists(): continue vozilo = Vozilo.objects.create( naziv=model_naziv, registracija=registracija, pocetni_kilometri=pocetni, trenutni_kilometri=trenutni, status=status_izbor ) brojac += 1 self.stdout.write(f" ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}] | Status: {status_izbor} ({brojac}/{total})") except IntegrityError: # Ako baza ipak prijavi duplikat registracije unutar transakcije, samo idemo dalje continue except ValidationError as ve: # Ako se pojavi neka druga validacijska greška, ispiši je da znamo o čemu se radi self.stderr.write(f" ⚠️ Validacijska greška za {model_naziv}: {ve}") continue except Exception as e: self.stderr.write(f" ❌ Kritična greška pri upisu vozila: {e}") break self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} servisnih vozila u bazu flote.'))