Files
atabackend/portfolio/management/commands/create_fake_portfolios.py
Beyhan Oğur d50f14bcb1 first commit
2026-04-26 22:20:45 +03:00

64 lines
2.5 KiB
Python

import random
import io
from django.core.management.base import BaseCommand
from django.core.files.base import ContentFile
from faker import Faker
from PIL import Image, ImageDraw
from portfolio.models import Portfolio, Category
class Command(BaseCommand):
help = 'Creates fake portfolio items with images using existing categories'
def generate_image(self, width, height, format='PNG'):
"""Generates a random image."""
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
image = Image.new('RGB', (width, height), color)
draw = ImageDraw.Draw(image)
# Draw some random shapes
for _ in range(10):
shape_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
x1 = random.randint(0, width)
y1 = random.randint(0, height)
x2 = random.randint(0, width)
y2 = random.randint(0, height)
# Ensure coordinates are in the correct order (x0, y0, x1, y1)
draw.rectangle(
[min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)],
fill=shape_color,
outline=None
)
img_io = io.BytesIO()
image.save(img_io, format=format)
return ContentFile(img_io.getvalue(), name=f'fake_image.{format.lower()}')
def handle(self, *args, **options):
fake = Faker()
# Fetch existing categories
categories = list(Category.objects.all())
if not categories:
self.stdout.write(self.style.WARNING('No categories found. Please create some categories first.'))
return
self.stdout.write(f'Found {len(categories)} categories. Creating portfolios...')
for i in range(20):
portfolio = Portfolio(
url=fake.url(),
is_active=True,
)
# Portfolio image: 640x481 (saving as PNG, model might convert to avif)
image_content = self.generate_image(640, 481, 'PNG')
portfolio.image.save(f'port_{i}.png', image_content, save=False)
portfolio.save()
# Assign random existing categories
# Ensure we don't try to sample more categories than exist
num_categories = min(len(categories), random.randint(1, 3))
portfolio.categories.set(random.sample(categories, k=num_categories))
self.stdout.write(self.style.SUCCESS('Successfully created fake portfolio items with images using existing categories.'))