5 changed files with 110 additions and 10 deletions
-
63apps/hadis/management/commands/assign_volume_images.py
-
49apps/hadis/serializers/reference_v2.py
-
7apps/hadis/views/reference_v2.py
-
1entrypoint.sh
-
BINstatic/images/image.png
@ -0,0 +1,63 @@ |
|||||
|
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})." |
||||
|
) |
||||
|
) |
||||
|
After Width: 185 | Height: 252 | Size: 131 KiB |
Write
Preview
Loading…
Cancel
Save
Reference in new issue