diff --git a/etpgrf_site/blog/admin.py b/etpgrf_site/blog/admin.py index 26038f4..39f3ca0 100644 --- a/etpgrf_site/blog/admin.py +++ b/etpgrf_site/blog/admin.py @@ -1,17 +1,20 @@ from django.contrib import admin +from django.utils.html import format_html +import html from .models import Post @admin.register(Post) class PostAdmin(admin.ModelAdmin): - list_display = ('title', 'post_type', 'is_published', 'published_at') + list_display = ('clean_title', 'post_type', 'is_published', 'published_at', 'updated_at') list_filter = ('post_type', 'is_published', 'published_at') search_fields = ('title', 'content', 'slug') prepopulated_fields = {'slug': ('title',)} date_hierarchy = 'published_at' + readonly_fields = ('updated_at',) fieldsets = ( (None, { - 'fields': ('title', 'slug', 'post_type', 'is_published', 'published_at') + 'fields': ('title', 'slug', 'post_type', 'is_published', 'published_at', 'updated_at') }), ('Контент', { 'fields': ('image', 'excerpt', 'content') @@ -21,3 +24,8 @@ class PostAdmin(admin.ModelAdmin): 'classes': ('collapse',) }), ) + + @admin.display(description='Заголовок', ordering='title') + def clean_title(self, obj): + """Отображает заголовок без HTML-сущностей (  -> пробел).""" + return html.unescape(obj.title) diff --git a/etpgrf_site/blog/migrations/0004_post_updated_at.py b/etpgrf_site/blog/migrations/0004_post_updated_at.py new file mode 100644 index 0000000..bed7a82 --- /dev/null +++ b/etpgrf_site/blog/migrations/0004_post_updated_at.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.1 on 2026-02-11 11:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0003_alter_post_excerpt'), + ] + + operations = [ + migrations.AddField( + model_name='post', + name='updated_at', + field=models.DateTimeField(auto_now=True, help_text='Автоматически обновляется при каждом сохранении.', verbose_name='Дата обновления'), + ), + ] diff --git a/etpgrf_site/blog/models.py b/etpgrf_site/blog/models.py index 0d49a0e..6733beb 100644 --- a/etpgrf_site/blog/models.py +++ b/etpgrf_site/blog/models.py @@ -43,6 +43,11 @@ class Post(models.Model): db_index=True, help_text="Дата, которая будет отображаться в блоге. Можно запланировать на будущее." ) + updated_at = models.DateTimeField( + "Дата обновления", + auto_now=True, + help_text="Автоматически обновляется при каждом сохранении." + ) content = models.TextField( verbose_name="Контент", diff --git a/etpgrf_site/blog/sitemaps.py b/etpgrf_site/blog/sitemaps.py index 2a1f02b..2ffe7b8 100644 --- a/etpgrf_site/blog/sitemaps.py +++ b/etpgrf_site/blog/sitemaps.py @@ -11,4 +11,4 @@ class PostSitemap(Sitemap): def lastmod(self, obj): """Возвращает дату последнего изменения.""" - return obj.published_at # Или можно добавить поле updated_at + return obj.updated_at # Используем дату обновления, а не публикации diff --git a/etpgrf_site/blog/templates/blog/page_detail.html b/etpgrf_site/blog/templates/blog/page_detail.html index 06ad7f6..48a15cd 100644 --- a/etpgrf_site/blog/templates/blog/page_detail.html +++ b/etpgrf_site/blog/templates/blog/page_detail.html @@ -23,7 +23,7 @@ } }, "datePublished": "{{ page.published_at|date:'Y-m-d' }}", - "dateModified": "{{ page.published_at|date:'Y-m-d' }}" + "dateModified": "{{ page.updated_at|date:'Y-m-d' }}" } {% endblock %} diff --git a/etpgrf_site/blog/templates/blog/post_detail.html b/etpgrf_site/blog/templates/blog/post_detail.html index a020d14..071c734 100644 --- a/etpgrf_site/blog/templates/blog/post_detail.html +++ b/etpgrf_site/blog/templates/blog/post_detail.html @@ -27,7 +27,7 @@ } }, "datePublished": "{{ post.published_at|date:'Y-m-d' }}", - "dateModified": "{{ post.published_at|date:'Y-m-d' }}" + "dateModified": "{{ post.updated_at|date:'Y-m-d' }}" } {% endblock %}