from django.core.management.base import BaseCommand, CommandError from django.contrib.auth import get_user_model from dispatch.models import Company, Load from faker import Faker from datetime import date, timedelta import random # import yaml User = get_user_model() class Command(BaseCommand): help = """Generate fake data.\n Example usage: \n ./manage.py insert_fake_data --companies 4 --users 3 --loads 800 --start-date='-16w' --end-date '+16w' """ fake = Faker() end_date="" start_date="" def add_arguments(self, parser): # parser.add_argument('--file', type=str, dest='filename') parser.add_argument('--companies', type=int, dest='companies', default='0') parser.add_argument('--users', type=int, dest='users', default='0') parser.add_argument('--loads', type=int, dest='loads', default='0') parser.add_argument('--start-date', type=str, dest='startdate', default='-2w') parser.add_argument('--end-date', type=str, dest='enddate', default='+2w') def handle(self, *args, **options): # Create the Fake drivers and their loads # for i in range(0, options['companies']): # co = self.fake_company() # for i in range(0, options['users']): # u = self.fake_user() # for i in range(0, options['loads']): # l = self.fake_load(u, co) self.end_date=options['enddate'] self.start_date=options['startdate'] company_ids = [] user_ids = [] for i in range(0, options['companies']): co = self.fake_company() # We're going to hold the model IDs in memory to access randomly # later on company_ids.append(co.pk) for i in range(0, options['users']): u = self.fake_user() user_ids.append(u.pk) for i in range(0, options['loads']): co_id = company_ids[random.randint(0, len(company_ids)-1)] co = Company.objects.get(pk=co_id) u_id = user_ids[random.randint(0, len(user_ids)-1)] u = User.objects.get(pk=u_id) l = self.fake_load(u, co) def fake_company(self): new_company = Company( name = self.fake.company(), address = self.fake.address(), phone_number = self.fake.msisdn(), email_address = self.fake.company_email(), contact_name = self.fake.name(), ) new_company.save() return new_company def fake_load(self, usr, co): new_load = Load( user=usr, # Because that's going to be random enough load_number=self.fake.license_plate(), description=self.fake.sentence(nb_words=6), company=co, amount=random.randint(150,2500) ) # Set the date to something random between last week and next week new_load.date=self.fake.date_between(start_date=self.start_date, end_date=self.end_date) new_load.save() return new_load def fake_user(self): new_user = User( first_name=self.fake.first_name(), last_name=self.fake.last_name(), email=self.fake.email(), username=self.fake.user_name(), is_active=True ) new_user.save() return new_user