import os from django.core.management.base import BaseCommand from django.conf import settings from django.core.files import File from apps.hadis.models import BookVolume, BookReferenceImage class Command(BaseCommand): help = 'Assigns static/images/image.png to all BookVolumes in the database' def add_arguments(self, parser): parser.add_argument( '--force', action='store_true', help='Force re-assign even if the volume already has an image', ) def handle(self, *args, **options): force = options.get('force', False) # 1. Locate the image file image_path = os.path.join(settings.BASE_DIR, 'static', 'images', 'image.png') if not os.path.exists(image_path): self.stdout.write(self.style.ERROR(f"Source image not found at: {image_path}")) return self.stdout.write(f"Source image found at: {image_path}") volumes = BookVolume.objects.all() total_volumes = volumes.count() self.stdout.write(f"Found {total_volumes} volumes in the database.") created_count = 0 updated_count = 0 for vol in volumes: # Check if volume already has an image existing_images = BookReferenceImage.objects.filter(book_volume=vol) if existing_images.exists() and not force: continue with open(image_path, 'rb') as f: if existing_images.exists() and force: # Overwrite the first existing image img_instance = existing_images.first() img_instance.image.save('image.png', File(f), save=True) updated_count += 1 else: # Create a new BookReferenceImage entry img_instance = BookReferenceImage( book_reference=vol.book_reference, book_volume=vol, order=0, description=[{"language_code": "fa", "text": f"تصویر پیش‌فرض {vol.title or ''}"}] ) img_instance.image.save('image.png', File(f), save=True) created_count += 1 self.stdout.write( self.style.SUCCESS( f"Successfully processed volumes: created {created_count}, updated {updated_count} (force={force})." ) )