Files
thrillwiki_django_no_react/media/management/commands/fix_photo_paths.py
2024-11-01 01:27:11 +00:00

59 lines
2.8 KiB
Python

import os
from django.core.management.base import BaseCommand
from media.models import Photo
from django.conf import settings
from django.db import transaction
class Command(BaseCommand):
help = 'Fix photo paths in database to match actual file locations'
def handle(self, *args, **kwargs):
self.stdout.write('Fixing photo paths in database...')
# Get all photos
photos = Photo.objects.all()
for photo in photos:
try:
with transaction.atomic():
# Get current file path
current_name = photo.image.name
# Remove any 'media/' prefix if it exists
if current_name.startswith('media/'):
current_name = current_name[6:] # Remove 'media/' prefix
parts = current_name.split('/')
if len(parts) >= 2:
content_type = parts[0] # 'park' or 'ride'
identifier = parts[1] # e.g., 'alton-towers'
# Look for files in the media directory
media_dir = os.path.join('media', content_type, identifier)
if os.path.exists(media_dir):
files = [f for f in os.listdir(media_dir)
if not f.startswith('.') and # Skip hidden files
not f.startswith('tmp') and # Skip temp files
os.path.isfile(os.path.join(media_dir, f))]
if files:
# Get the first file and update the database record
file_path = os.path.join(content_type, identifier, files[0])
if os.path.exists(os.path.join('media', file_path)):
photo.image.name = file_path
photo.save()
self.stdout.write(f'Updated path for photo {photo.id} to {file_path}')
else:
self.stdout.write(f'File not found for photo {photo.id}: {file_path}')
else:
self.stdout.write(f'No files found in directory for photo {photo.id}: {media_dir}')
else:
self.stdout.write(f'Directory not found for photo {photo.id}: {media_dir}')
except Exception as e:
self.stdout.write(f'Error updating photo {photo.id}: {str(e)}')
continue
self.stdout.write('Finished fixing photo paths')