import random from django.core.management.base import BaseCommand from django.core.exceptions import ValidationError from faker import Faker from fleet.models import Vozilo class Command(BaseCommand): help = 'Popunjava bazu podataka s gospodarskim vozilima koristeći Faker' 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 se pojavljuju u tvom radnom nalogu (CSV) 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} vozila u flotu...')) brojac = 0 while brojac < total: model_naziv = random.choice(modeli_podaci) # Generiranje registracije koristeći Faker numerify/bothify # Format: ZG 1234 AB gradovi = ['ZG', 'ST', 'RI', 'OS', 'VZ', 'PU', 'KA', 'KC'] grad = random.choice(gradovi) reg_oznaka = fake.numerify(text='####') # npr. 6732 reg_slova = fake.bothify(text='??', letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ') # npr. II registracija = f"{grad}{reg_oznaka}{reg_slova}" # Kilometri: Koristimo tvoju logiku da trenutni budu veći od početnih pocetni = random.randint(0, 150000) dodatni = random.randint(500, 20000) trenutni = pocetni + dodatni try: # Koristimo registraciju u nazivu radi lakšeg prepoznavanja u Astro frontendu vozilo = Vozilo.objects.create( naziv=f"{model_naziv} ({grad})", registracija=registracija, pocetni_kilometri=pocetni, trenutni_kilometri=trenutni, status=random.choice(['aktivan', 'aktivan', 'servis', 'neaktivan']) ) brojac += 1 self.stdout.write(f" ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}]") except ValidationError: # Ako Faker pogodi postojeću registraciju, samo nastavi dalje continue except Exception as e: self.stderr.write(f" ❌ Greška: {e}") break self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} vozila u flotu.'))