Добавлена проверка общего лимита фото при редактировании
- Проверяется количество уже существующих фото перед загрузкой новых - Блокируется загрузка если уже есть 10 фото (максимум) - При превышении загружается только доступное количество слотов - Информативные сообщения об ошибках и предупреждения для пользователя - Исправлена проблема с накоплением фото при многократном редактировании
This commit is contained in:
@@ -43,15 +43,36 @@ def handle_photos(request, parent_obj, photo_model, parent_field_name):
|
||||
if not photos:
|
||||
return errors
|
||||
|
||||
# МАКСИМУМ 10 ФОТО - сохраняем первые 10, остальные отклоняем
|
||||
# МАКСИМУМ 10 ФОТО на товар/комплект/категорию
|
||||
MAX_PHOTOS = 10
|
||||
if len(photos) > MAX_PHOTOS:
|
||||
warnings.append(f'Загружено {len(photos)} фото, но обработано только первые {MAX_PHOTOS}. '
|
||||
f'Максимум {MAX_PHOTOS} фото на товар.')
|
||||
photos = photos[:MAX_PHOTOS]
|
||||
|
||||
# Получаем количество уже существующих фото
|
||||
filter_kwargs = {parent_field_name: parent_obj}
|
||||
existing_count = photo_model.objects.filter(**filter_kwargs).count()
|
||||
|
||||
# Проверяем общий лимит (существующие + новые)
|
||||
total_after_upload = existing_count + len(photos)
|
||||
|
||||
if existing_count >= MAX_PHOTOS:
|
||||
# Уже достигнут лимит - новые фото не принимаем
|
||||
errors.append(
|
||||
f'Достигнут лимит: максимум {MAX_PHOTOS} фото. '
|
||||
f'Сейчас уже загружено {existing_count} фото. '
|
||||
f'Удалите лишние фото перед добавлением новых.'
|
||||
)
|
||||
return errors
|
||||
|
||||
if total_after_upload > MAX_PHOTOS:
|
||||
# Превышение лимита - сохраняем только те фото, которые влезают
|
||||
available_slots = MAX_PHOTOS - existing_count
|
||||
warnings.append(
|
||||
f'Можно загрузить только {available_slots} фото '
|
||||
f'(уже есть {existing_count}, лимит {MAX_PHOTOS}). '
|
||||
f'Обработано первые {available_slots} из {len(photos)} загруженных файлов.'
|
||||
)
|
||||
photos = photos[:available_slots]
|
||||
|
||||
# Получаем максимальный order для этого родительского объекта
|
||||
filter_kwargs = {parent_field_name: parent_obj}
|
||||
max_order = photo_model.objects.filter(**filter_kwargs).aggregate(
|
||||
models.Max('order')
|
||||
)['order__max']
|
||||
|
||||
Reference in New Issue
Block a user