import random from django.core.management.base import BaseCommand from faker import Faker from kupci.models import Kupac class Command(BaseCommand): help = 'Popunjava bazu podataka s testnim kupcima spremnim za logistički modul' def add_arguments(self, parser): parser.add_argument( 'total', type=int, help='Broj kupaca koje želiš kreirati', default=10 ) def handle(self, *args, **kwargs): total = kwargs['total'] fake = Faker(['hr_HR']) self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Kreiram {total} testnih kupaca...')) # Kontrolirani skup gradova u nominativu za savršen ispis relacija i odredišta u logistici hr_gradovi = [ {'grad': 'Zagreb', 'pbr': '10000'}, {'grad': 'Karlovac', 'pbr': '47000'}, {'grad': 'Ozalj', 'pbr': '47280'}, {'grad': 'Split', 'pbr': '21000'}, {'grad': 'Rijeka', 'pbr': '51000'}, {'grad': 'Osijek', 'pbr': '31000'}, {'grad': 'Varaždin', 'pbr': '42000'}, {'grad': 'Zadar', 'pbr': '23000'}, {'grad': 'Velika Gorica', 'pbr': '10410'}, {'grad': 'Sisak', 'pbr': '44000'} ] created_count = 0 for _ in range(total): tip = random.choice(['pravno', 'fizicko']) if tip == 'pravno': naziv = fake.company() else: naziv = fake.name() # Generiramo OIB (točno 11 znamenki u string formatu) oib = "".join([str(random.randint(0, 9)) for _ in range(11)]) # Odabiremo grad i poštanski broj u paru kako bi podaci imali smisla lokacija = random.choice(hr_gradovi) # Generiramo telefonski broj koji je čist i siguran za tel: linkove u Astru pozivni = random.randint(1, 9) telefon = f"+385 {pozivni} {random.randint(100, 999)}-{random.randint(1000, 9999)}" try: # Upotrebljavamo create, a jedinstvenost OIB-a hvatamo u iznimci Kupac.objects.create( naziv=naziv, oib=oib, email=fake.email(), telefon=telefon, adresa=fake.street_address(), grad=lokacija['grad'], # Usklađeno: čisti nominativ (npr. 'Karlovac') postanski_broj=lokacija['pbr'], # Usklađeno: odgovarajući poštanski broj tip=tip, napomena="Automatski generiran testni kupac usklađen s modulom operativne logistike.", aktivno=True ) created_count += 1 except Exception as e: # Ako OIB slučajno kolidira (unutar unique=True), preskoči i nastavi generirati sljedećeg continue self.stdout.write(self.style.SUCCESS(f'✅ Uspješno dodano {created_count} novih kupaca u bazu!'))