From 08bfce2c4cf9daed7a60653728ece79427de4d96 Mon Sep 17 00:00:00 2001 From: erjemin Date: Mon, 29 Jun 2026 21:15:16 +0300 Subject: [PATCH] =?UTF-8?q?mod:=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=BA?= =?UTF-8?q?=D0=B0=20(15)=20=D0=B4=D0=BB=D1=8F=20=D0=9B=D0=B5=D0=B9=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20LabelAdminForm=20=D0=B8=20LabelAdmin=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=BC=D0=BD=D1=8B=D0=B9=20save=5Fmodel=20(?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?/=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8)=20=D0=B8=20=D1=83=D0=BD?= =?UTF-8?q?=D0=B8=D0=B2=D0=B5=D1=80=D1=81=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=85=D0=B5=D0=BB=D0=BF=D0=B5=D1=80-=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D1=8F.=20+=20=D0=BC=D0=B8=D0=BA=D1=80?= =?UTF-8?q?=D0=BE-=D1=85=D0=B5=D0=BB=D0=BF=D0=B5=D1=80=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=81=D0=B2=D1=8F=D0=B7=D0=B0=D0=BD=D0=BD=D0=BE=D0=B9=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=8C=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lpon_site/frontend/admin.py | 61 ++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/lpon_site/frontend/admin.py b/lpon_site/frontend/admin.py index d67a450..add9ff7 100644 --- a/lpon_site/frontend/admin.py +++ b/lpon_site/frontend/admin.py @@ -14,9 +14,41 @@ from .utils import validate_entity_for_admin_form, generate_admin_save_message # ============================================================================ -# МИКСИНЫ ДЛЯ АДМИНКИ +# ЛОКАЛЬНЫЕ ХЕЛПЕРЫ ДЛЯ АДМИНКИ # ============================================================================ +def get_related_article_description(model_class): + """ + Генерирует HTML-описание для fieldset'а 'Связанная публикация'. + + Описание объясняет роль связанной статьи и предлагает создавать её вручную. + Использует verbose_name из модели для универсальности. + + Args: + model_class: Класс модели (TbLabel, TbArtist, TbMusicStyle и т.д.) + + Returns: + str: HTML-описание для fieldset'а + + Пример: + 'description': get_related_article_description(TbLabel) + """ + # Получаем наименование модели в родительном падеже (для описания) + verbose_name = model_class._meta.verbose_name.upper() + + # Получаем наименование во множественном числе (для списков альбомов) + verbose_name_plural = model_class._meta.verbose_name_plural.upper() + + return (f'Прикреп­ленная статья (если есть) будет отображаться на странице {verbose_name}' + f' на сайте. Также позволяет получать список всех альбомов {verbose_name_plural},' + f' управлять SEO-атрибутами для улучшения видимости поисковых систем, иметь красивый' + f' slag для URL-странички, подсчитывать число просмотров и добавлений' + f' в избранные. ОЧЕНЬ РЕКОМЕН­ДУЕТСЯ СОЗДАВАТЬ' + f' И ПРИВЯЗЫВАТЬ СТАТЬЮ ВРУЧНУЮ. Если публикация не создана вручную,' + f' то она будет создана автоматически (пустая) при сохранении {verbose_name},' + f' со всеми SEO-атрибутами и slag, но автоматика несовершенна.
 ') + + class RequestInFormMixin(admin.ModelAdmin): """ Миксин для передачи request объекта в форму. @@ -360,14 +392,7 @@ class MusicStyleAdmin(admin.ModelAdmin): }), ('Связанная публикация', { 'fields': ('k_style_to_article',), - 'description': 'Прикреп­ленная статья (если есть) будет отображаться на странице музыкального' - ' стиля на сайте. Также позволяет получать список всех альбомов музыкального стиля,' - ' управлять SEO-атрибутами для улучшения видимости поисковых систем, иметь красивый' - ' slag для URL-странички, подсчитывать число просмотров и добавлений' - ' в избранные. ОЧЕНЬ РЕКОМЕН­ДУЕТСЯ СОЗДАВАТЬ' - ' И ПРИВЯЗЫВАТЬ СТАТЬЮ ВРУЧНУЮ. Если публикация не создана вручную,' - ' то она будет создана автоматически (пустая) при сохранении музыкального стиля,' - ' со всеми SEO-атрибутами и slag, но автоматика несовершенна.
 ', + 'description': get_related_article_description(TbMusicStyle), # 'classes': ('collapse',), }), ('Служебная информация', { @@ -439,14 +464,7 @@ class ArtistAdmin(admin.ModelAdmin): }), ('Связанная публикация', { 'fields': ('k_artist_to_article', ), - 'description': 'Прикреп­ленная статья (если есть) будет отображаться на странице исполнителя' - ' на сайте. Также позволяет получать список всех альбомов исполнителя, управлять' - ' SEO-атрибутами для улучшения видимости поисковых систем, иметь красивый' - ' slag для URL-странички, подсчитывать число просмотров и добавлений' - ' в избранные. ОЧЕНЬ РЕКОМЕН­ДУЕТСЯ СОЗДАВАТЬ' - ' И ПРИВЯЗЫВАТЬ СТАТЬЮ ВРУЧНУЮ. Если публикация не создана вручную,' - ' то она будет создана автоматически (пустая) при сохранении исполнителя,' - ' со всеми SEO-атрибутами и slag, но автоматика несовершенна.
 ', + 'description': get_related_article_description(TbArtist), # 'classes': ('collapse',), }), ('Служебная информация', { @@ -573,14 +591,7 @@ class LabelAdmin(RequestInFormMixin, admin.ModelAdmin): }), ('Связанная публикация', { 'fields': ('k_label_to_article', ), - 'description': 'Прикреп­ленная статья (если есть) будет отображаться на странице лейбла' - ' на сайте. Также позволяет получать список всех альбомов лейбла, управлять' - ' SEO-атрибутами для улучшения видимости поисковых систем, иметь красивый' - ' slag для URL-странички, подсчитывать число просмотров и добавлений' - ' в избранные. ОЧЕНЬ РЕКОМЕН­ДУЕТСЯ СОЗДАВАТЬ' - ' И ПРИВЯЗЫВАТЬ СТАТЬЮ ВРУЧНУЮ. Если публикация не создана вручную,' - ' то она будет создана автоматически (пустая) при сохранении лейбла,' - ' со всеми SEO-атрибутами и slag, но автоматика несовершенна.
 ', + 'description': get_related_article_description(TbLabel), # 'classes': ('collapse',), }), ('Служебная информация', {