from django.core.management.base import BaseCommand from parks.models import Park, ParkArea, ParkLocation, Company as Operator class Command(BaseCommand): help = "Seeds initial park data with major theme parks worldwide" def handle(self, *args, **options): # Create major theme park companies companies_data = [ { "name": "The Walt Disney Company", "website": "https://www.disney.com/", "headquarters": "Burbank, California", "description": "The world's largest entertainment company and theme park operator.", }, { "name": "Universal Parks & Resorts", "website": "https://www.universalparks.com/", "headquarters": "Orlando, Florida", "description": "A division of Comcast NBCUniversal, operating major theme parks worldwide.", }, { "name": "Six Flags Entertainment Corporation", "website": "https://www.sixflags.com/", "headquarters": "Arlington, Texas", "description": "The world's largest regional theme park company.", }, { "name": "Cedar Fair Entertainment Company", "website": "https://www.cedarfair.com/", "headquarters": "Sandusky, Ohio", "description": "One of North America's largest operators of regional amusement parks.", }, { "name": "Herschend Family Entertainment", "website": "https://www.hfecorp.com/", "headquarters": "Atlanta, Georgia", "description": "The largest family-owned themed attractions corporation in the United States.", }, { "name": "SeaWorld Parks & Entertainment", "website": "https://www.seaworldentertainment.com/", "headquarters": "Orlando, Florida", "description": "Theme park and entertainment company focusing on nature-based themes.", }, ] companies = {} for company_data in companies_data: operator, created = Operator.objects.get_or_create( name=company_data["name"], defaults=company_data ) companies[operator.name] = operator self.stdout.write( f'{"Created" if created else "Found"} company: {operator.name}' ) # Create parks with their locations parks_data = [ { "name": "Magic Kingdom", "company": "The Walt Disney Company", "description": "The first theme park at Walt Disney World Resort in Florida, opened in 1971.", "opening_date": "1971-10-01", "size_acres": 142, "location": { "street_address": "1180 Seven Seas Dr", "city": "Lake Buena Vista", "state": "Florida", "country": "United States", "postal_code": "32830", "latitude": 28.4177, "longitude": -81.5812, }, "areas": [ { "name": "Main Street, U.S.A.", "description": "Victorian-era themed entrance corridor", }, { "name": "Adventureland", "description": "Exotic tropical places themed area", }, { "name": "Frontierland", "description": "American Old West themed area", }, { "name": "Liberty Square", "description": "Colonial America themed area", }, { "name": "Fantasyland", "description": "Fairy tale themed area", }, { "name": "Tomorrowland", "description": "Future themed area", }, ], }, { "name": "Universal Studios Florida", "company": "Universal Parks & Resorts", "description": "Movie and television-based theme park in Orlando, Florida.", "opening_date": "1990-06-07", "size_acres": 108, "location": { "street_address": "6000 Universal Blvd", "city": "Orlando", "state": "Florida", "country": "United States", "postal_code": "32819", "latitude": 28.4749, "longitude": -81.4687, }, "areas": [ { "name": "Production Central", "description": "Main entrance area with movie-themed attractions", }, { "name": "New York", "description": "Themed after New York City streets", }, { "name": "San Francisco", "description": "Themed after San Francisco's waterfront", }, { "name": "The Wizarding World of Harry Potter - Diagon Alley", "description": "Themed after the Harry Potter series", }, { "name": "Springfield", "description": "Themed after The Simpsons hometown", }, ], }, { "name": "Cedar Point", "company": "Cedar Fair Entertainment Company", "description": 'Known as the "Roller Coaster Capital of the World".', "opening_date": "1870-06-01", "size_acres": 364, "location": { "street_address": "1 Cedar Point Dr", "city": "Sandusky", "state": "Ohio", "country": "United States", "postal_code": "44870", "latitude": 41.4822, "longitude": -82.6835, }, "areas": [ { "name": "Frontiertown", "description": "Western-themed area with multiple roller coasters", }, { "name": "Millennium Island", "description": "Home to the Millennium Force roller coaster", }, { "name": "Cedar Point Shores", "description": "Waterpark area", }, { "name": "Top Thrill Dragster", "description": "Area surrounding the iconic launched coaster", }, ], }, { "name": "Silver Dollar City", "company": "Herschend Family Entertainment", "description": "An 1880s-themed park featuring over 40 rides and attractions.", "opening_date": "1960-05-01", "size_acres": 61, "location": { "street_address": "399 Silver Dollar City Parkway", "city": "Branson", "state": "Missouri", "country": "United States", "postal_code": "65616", "latitude": 36.668497, "longitude": -93.339074, }, "areas": [ { "name": "Grand Exposition", "description": "Home to many family rides and attractions", }, { "name": "Wildfire", "description": "Named after the famous B&M coaster", }, { "name": "Wilson's Farm", "description": "Farm-themed attractions and dining", }, { "name": "Riverfront", "description": "Water-themed attractions area", }, { "name": "The Valley", "description": "Home to Time Traveler and other major attractions", }, ], }, { "name": "Six Flags Magic Mountain", "company": "Six Flags Entertainment Corporation", "description": "Known for its world-record 19 roller coasters.", "opening_date": "1971-05-29", "size_acres": 262, "location": { "street_address": "26101 Magic Mountain Pkwy", "city": "Valencia", "state": "California", "country": "United States", "postal_code": "91355", "latitude": 34.4253, "longitude": -118.5971, }, "areas": [ { "name": "Six Flags Plaza", "description": "Main entrance area", }, { "name": "DC Universe", "description": "DC Comics themed area", }, { "name": "Screampunk District", "description": "Steampunk themed area", }, { "name": "The Underground", "description": "Urban themed area", }, { "name": "Goliath Territory", "description": "Area surrounding the Goliath hypercoaster", }, ], }, { "name": "SeaWorld Orlando", "company": "SeaWorld Parks & Entertainment", "description": "Marine zoological park combined with thrill rides and shows.", "opening_date": "1973-12-15", "size_acres": 200, "location": { "street_address": "7007 Sea World Dr", "city": "Orlando", "state": "Florida", "country": "United States", "postal_code": "32821", "latitude": 28.4115, "longitude": -81.4617, }, "areas": [ { "name": "Sea Harbor", "description": "Main entrance and shopping area", }, { "name": "Shark Encounter", "description": "Shark exhibit and themed area", }, { "name": "Antarctica: Empire of the Penguin", "description": "Penguin-themed area", }, { "name": "Manta", "description": "Area themed around the Manta flying roller coaster", }, { "name": "Sesame Street Land", "description": "Kid-friendly area based on Sesame Street", }, ], }, ] # Create parks and their areas for park_data in parks_data: company = companies[park_data["company"]] park, created = Park.objects.get_or_create( name=park_data["name"], defaults={ "description": park_data["description"], "status": "OPERATING", "opening_date": park_data["opening_date"], "size_acres": park_data["size_acres"], "owner": company, }, ) self.stdout.write(f'{"Created" if created else "Found"} park: {park.name}') # Create location for park if created: loc_data = park_data["location"] park_location = ParkLocation.objects.create( park=park, street_address=loc_data["street_address"], city=loc_data["city"], state=loc_data["state"], country=loc_data["country"], postal_code=loc_data["postal_code"], ) # Set coordinates using the helper method park_location.set_coordinates( loc_data["latitude"], loc_data["longitude"] ) park_location.save() # Create areas for park for area_data in park_data["areas"]: area, created = ParkArea.objects.get_or_create( name=area_data["name"], park=park, defaults={"description": area_data["description"]}, ) self.stdout.write( f'{"Created" if created else "Found"} area: {area.name} in {park.name}' ) self.stdout.write(self.style.SUCCESS("Successfully seeded initial park data"))