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