From 30eb50dde6125ad3860ebc509233518a0446a493 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sat, 11 Jul 2026 11:54:09 +0300 Subject: [PATCH] =?UTF-8?q?mod:=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20=D1=84=D0=BE=D1=80=D0=BC,=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D1=81=D0=B5=D1=80=D0=B0=20=D0=B8=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B9=20(20)=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=B0=D0=B2=D0=BB=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20ALT=20=D0=B8=20TITLE=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BE=D0=BA=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=81=D1=82=D0=B0=D1=82=D0=B5=D0=B9=20(=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D1=88=D0=B8=D1=80=D0=B8=D0=BB=D0=B8=20save=20=D0=B2=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20TbArticle=20=D0=B8=20?= =?UTF-8?q?=D0=BE=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=BA=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D0=BD=D0=BA=D0=BE=20=D0=B2=20django=5Ffiler)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lpon_site/frontend/models.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lpon_site/frontend/models.py b/lpon_site/frontend/models.py index 0dd5e70..ec0d3be 100644 --- a/lpon_site/frontend/models.py +++ b/lpon_site/frontend/models.py @@ -539,7 +539,7 @@ class TbArticle(models.Model): if not metadata or not KEY_IMAGE_NOTE in (metadata.j_img_metadata or {}): adding_metadata[KEY_IMAGE_NOTE] = None if not metadata: - TbImageMetadata.objects.create( + metadata = TbImageMetadata.objects.create( image=self.k_article_to_image, i_img_sort=0, j_img_metadata=adding_metadata @@ -549,6 +549,39 @@ class TbArticle(models.Model): if adding_metadata: metadata.j_img_metadata.update(adding_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 т.к. это статья, а не оффер class Meta: