add a db init command

shop
Raz 8 months ago
parent aa2cdbcca9
commit 1a181f7d0e
  1. 0
      shop/management/commands/__init__.py
  2. 114
      shop/management/commands/create_initial_shop_data.py

@ -0,0 +1,114 @@
from django.core.management.base import BaseCommand
from shop.models import Color, Size, Product
from django.core.files.base import ContentFile
import os
import urllib.request
class Command(BaseCommand):
help = 'Creates initial data for the shop'
def handle(self, *args, **kwargs):
# Create colors
self.stdout.write('Creating colors...')
colors = {
'Black': '#000000',
'White': '#FFFFFF',
'Red': '#FF0000',
'Blue': '#0000FF',
'Green': '#00FF00',
'Yellow': '#FFFF00'
}
color_objects = {}
for name, hex_code in colors.items():
color, created = Color.objects.get_or_create(
name=name,
defaults={'colorHex': hex_code}
)
color_objects[name] = color
if created:
self.stdout.write(f'Created color: {name}')
else:
self.stdout.write(f'Color already exists: {name}')
# Create sizes
self.stdout.write('Creating sizes...')
sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL']
size_objects = {}
for name in sizes:
size, created = Size.objects.get_or_create(name=name)
size_objects[name] = size
if created:
self.stdout.write(f'Created size: {name}')
else:
self.stdout.write(f'Size already exists: {name}')
# Create products
self.stdout.write('Creating products...')
products = [
{
'title': 'Tennis Racket Pro',
'price': 99.99,
'ordering_value': 1,
'cut': 2, # Men
'colors': ['Black', 'White', 'Red'],
'sizes': ['M', 'L', 'XL'],
'image_url': 'https://example.com/images/tennis_racket.jpg'
},
{
'title': 'Sports T-Shirt',
'price': 29.99,
'ordering_value': 2,
'cut': 1, # Women
'colors': ['Black', 'White', 'Blue', 'Red'],
'sizes': ['XS', 'S', 'M', 'L', 'XL'],
'image_url': 'https://example.com/images/tshirt.jpg'
},
{
'title': 'Kids Tennis Shorts',
'price': 19.99,
'ordering_value': 3,
'cut': 3, # Kids
'colors': ['Blue', 'White'],
'sizes': ['XS', 'S', 'M'],
'image_url': 'https://example.com/images/kids_shorts.jpg'
}
]
for product_data in products:
product, created = Product.objects.get_or_create(
title=product_data['title'],
defaults={
'price': product_data['price'],
'ordering_value': product_data['ordering_value'],
'cut': product_data['cut']
}
)
if created:
self.stdout.write(f'Created product: {product_data["title"]}')
# Add colors
for color_name in product_data['colors']:
product.colors.add(color_objects[color_name])
# Add sizes
for size_name in product_data['sizes']:
product.sizes.add(size_objects[size_name])
# Add image (commented out, use if needed)
"""
try:
result = urllib.request.urlretrieve(product_data['image_url'])
product.image.save(
os.path.basename(product_data['image_url']),
ContentFile(open(result[0], 'rb').read())
)
except Exception as e:
self.stdout.write(f'Error downloading image: {e}')
"""
else:
self.stdout.write(f'Product already exists: {product_data["title"]}')
self.stdout.write(self.style.SUCCESS('Successfully created initial shop data'))
Loading…
Cancel
Save