mod: валидатор форм, парсера и моделей (20) автоматически устанавливаем ALT и TITLE для картинок для статей (расширили save в модели TbArticle и он проверяет и изменяет поля картинко в django_filer)

This commit is contained in:
2026-07-11 11:54:09 +03:00
parent ee45d3a2fa
commit 30eb50dde6
+34 -1
View File
@@ -539,7 +539,7 @@ class TbArticle(models.Model):
if not metadata or not KEY_IMAGE_NOTE in (metadata.j_img_metadata or {}): if not metadata or not KEY_IMAGE_NOTE in (metadata.j_img_metadata or {}):
adding_metadata[KEY_IMAGE_NOTE] = None adding_metadata[KEY_IMAGE_NOTE] = None
if not metadata: if not metadata:
TbImageMetadata.objects.create( metadata = TbImageMetadata.objects.create(
image=self.k_article_to_image, image=self.k_article_to_image,
i_img_sort=0, i_img_sort=0,
j_img_metadata=adding_metadata j_img_metadata=adding_metadata
@@ -549,6 +549,39 @@ class TbArticle(models.Model):
if adding_metadata: if adding_metadata:
metadata.j_img_metadata.update(adding_metadata) metadata.j_img_metadata.update(adding_metadata)
metadata.save(update_fields=['j_img_metadata']) metadata.save(update_fields=['j_img_metadata'])
# Заполняем поля filer.Image если они пусты
# Это улучшает SEO и accessibility (для скринридеров, поисковиков)
image_needs_update = False
# default_alt_text (alt) — компактное описание для скринридеров и SEO
if not self.k_article_to_image.default_alt_text:
# Приоритет: KEY_IMAGE_NOTE → seo_title (оптимизирован для SEO) → fallback
alt_text = (
metadata.j_img_metadata.get(KEY_IMAGE_NOTE)
or self.seo_title
or self.s_article_title[:60]
)
self.k_article_to_image.default_alt_text = alt_text
image_needs_update = True
# default_caption (title) — подробное описание с контекстом
if not self.k_article_to_image.default_caption:
# Используем seo_description (оптимизирован для SEO) с добавлением типа и источника
caption = self.seo_description or self.s_article_title[:80]
# Добавляем метаинформацию для полноты
caption = (
f"{caption}. "
f"Type: {metadata.j_img_metadata[KEY_IMAGE_TYPE]}. "
f"Source: {metadata.j_img_metadata[KEY_IMAGE_FROM]}"
)
self.k_article_to_image.default_caption = caption
image_needs_update = True
# Сохраняем картинку, если были изменения
if image_needs_update:
self.k_article_to_image.save()
# Примечание: m_offer остаётся NULL т.к. это статья, а не оффер # Примечание: m_offer остаётся NULL т.к. это статья, а не оффер
class Meta: class Meta: