You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.9 KiB
86 lines
3.9 KiB
import os
|
|
from django.core.management.base import BaseCommand
|
|
from django.conf import settings
|
|
from django.core.files import File
|
|
# REPLACE 'your_app' WITH YOUR ACTUAL APP NAME(S)
|
|
from apps.hadis.models import BookReference, BookReferenceImage, HadisReference, ReferenceImage
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Seeds BookReferenceImage and ReferenceImage from seeds/images directory'
|
|
|
|
def handle(self, *args, **options):
|
|
# 1. Setup Paths
|
|
base_dir = settings.BASE_DIR
|
|
seeds_path = os.path.join(base_dir, 'seeds', 'images')
|
|
|
|
# Define source images
|
|
book_images = [f'book{i}.png' for i in range(1, 6)] # book1.png to book5.png
|
|
ref_images = [f'ref{i}.png' for i in range(1, 5)] # ref1.png to ref4.png
|
|
|
|
# Check if directory exists
|
|
if not os.path.exists(seeds_path):
|
|
self.stdout.write(self.style.ERROR(f"Directory not found: {seeds_path}"))
|
|
return
|
|
|
|
self.stdout.write("Starting image seeding process...")
|
|
|
|
# ---------------------------------------------------------
|
|
# 2. Process BookReferences
|
|
# ---------------------------------------------------------
|
|
books = BookReference.objects.all()
|
|
book_count = 0
|
|
|
|
if not books.exists():
|
|
self.stdout.write(self.style.WARNING("No BookReference objects found."))
|
|
else:
|
|
for index, book in enumerate(books):
|
|
# Cycle through the 5 images using modulo operator
|
|
image_name = book_images[index % len(book_images)]
|
|
image_path = os.path.join(seeds_path, image_name)
|
|
|
|
if os.path.exists(image_path):
|
|
with open(image_path, 'rb') as f:
|
|
# Create the instance
|
|
book_img_instance = BookReferenceImage(
|
|
book_reference=book,
|
|
order=0,
|
|
description=[{"language_code": "en", "text": f"Auto-generated image for {book.pk}"}]
|
|
)
|
|
# Save the file content to the ImageField
|
|
# This automatically handles the upload_to path defined in your model
|
|
book_img_instance.image.save(image_name, File(f), save=True)
|
|
book_count += 1
|
|
else:
|
|
self.stdout.write(self.style.WARNING(f"Image not found: {image_name}"))
|
|
|
|
self.stdout.write(self.style.SUCCESS(f"Successfully created {book_count} BookReferenceImages."))
|
|
|
|
# ---------------------------------------------------------
|
|
# 3. Process HadisReferences (ReferenceImage)
|
|
# ---------------------------------------------------------
|
|
# Note: Your model class is 'ReferenceImage', though you asked for 'HadisReferenceImage'
|
|
refs = HadisReference.objects.all()
|
|
ref_count = 0
|
|
|
|
if not refs.exists():
|
|
self.stdout.write(self.style.WARNING("No HadisReference objects found."))
|
|
else:
|
|
for index, ref in enumerate(refs):
|
|
# Cycle through the 4 images
|
|
image_name = ref_images[index % len(ref_images)]
|
|
image_path = os.path.join(seeds_path, image_name)
|
|
|
|
if os.path.exists(image_path):
|
|
with open(image_path, 'rb') as f:
|
|
# Create the instance
|
|
ref_img_instance = ReferenceImage(
|
|
reference=ref,
|
|
priority=0
|
|
)
|
|
# Your model uses 'thumbnail' field, not 'image'
|
|
ref_img_instance.thumbnail.save(image_name, File(f), save=True)
|
|
ref_count += 1
|
|
else:
|
|
self.stdout.write(self.style.WARNING(f"Image not found: {image_name}"))
|
|
|
|
self.stdout.write(self.style.SUCCESS(f"Successfully created {ref_count} ReferenceImages."))
|