Улучшение системы работы с фото: добавлена команда очистки битых записей и оптимизация обработки изображений
This commit is contained in:
@@ -45,7 +45,10 @@ def generic_photo_delete(request, pk, photo_model, redirect_url_name, parent_att
|
||||
|
||||
def generic_photo_set_main(request, pk, photo_model, redirect_url_name, parent_attr, permission):
|
||||
"""
|
||||
Универсальная установка фото как главного (order = 0).
|
||||
Универсальная установка фото как главного (is_main=True).
|
||||
|
||||
Автоматически сбрасывает is_main=False у старого главного фото.
|
||||
Constraint на уровне БД гарантирует, что у сущности может быть только одно is_main=True.
|
||||
|
||||
Args:
|
||||
request: HTTP request
|
||||
@@ -64,24 +67,21 @@ def generic_photo_set_main(request, pk, photo_model, redirect_url_name, parent_a
|
||||
messages.error(request, 'У вас нет прав для изменения порядка фотографий.')
|
||||
return redirect(redirect_url_name, pk=parent_id)
|
||||
|
||||
# Получаем все фото этого родительского объекта
|
||||
filter_kwargs = {f"{parent_attr}_id": parent_id}
|
||||
photos = photo_model.objects.filter(**filter_kwargs).order_by('order')
|
||||
|
||||
# Если это уже главное фото, ничего не делаем
|
||||
if photo.order == 0:
|
||||
if photo.is_main:
|
||||
messages.info(request, 'Это фото уже установлено как главное.')
|
||||
return redirect(redirect_url_name, pk=parent_id)
|
||||
|
||||
# Меняем порядок: текущее главное фото становится вторым
|
||||
old_order = photo.order
|
||||
for p in photos:
|
||||
if p.pk == photo.pk:
|
||||
p.order = 0
|
||||
p.save()
|
||||
elif p.order == 0:
|
||||
p.order = old_order
|
||||
p.save()
|
||||
# Сбрасываем is_main у старого главного фото
|
||||
filter_kwargs = {f"{parent_attr}_id": parent_id, 'is_main': True}
|
||||
old_main = photo_model.objects.filter(**filter_kwargs).first()
|
||||
if old_main:
|
||||
old_main.is_main = False
|
||||
old_main.save(update_fields=['is_main'])
|
||||
|
||||
# Устанавливаем новое главное фото
|
||||
photo.is_main = True
|
||||
photo.save(update_fields=['is_main'])
|
||||
|
||||
messages.success(request, 'Фото установлено как главное!')
|
||||
return redirect(redirect_url_name, pk=parent_id)
|
||||
|
||||
Reference in New Issue
Block a user