parent
aa2cdbcca9
commit
1a181f7d0e
@ -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…
Reference in new issue