
filter_horizontal или filter_vertical в АДМИН панели
14 июня 2025 г. 20:46
Я помогу вам изменить панель администратора, чтобы можно было выбирать теги из списка, а не вводить их. Мы будем использовать встроенный в Django виджет filter_horizontal или filter_vertical для поля теги в интерфейсе администратора.
Я помогу вам изменить панель администратора, чтобы можно было выбирать теги из списка, а не вводить их. Мы будем использовать встроенный в Django виджет filter_horizontal или filter_vertical для поля теги в интерфейсе администратора.
from django.contrib import admin
from django.utils.safestring import mark_safe
from .models import Post, Category, Comment
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ['title', 'parent', 'slug']
prepopulated_fields = {'slug': ('title',)}
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
""" Админ-панель модели Post """
list_display = ['title', 'post_photo', 'category', 'fixed', 'author', 'created']
list_display_links = ['title', 'post_photo', 'category']
list_filter = ['status', 'category', 'author', 'tags']
search_fields = ['title', 'author']
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ['category']
date_hierarchy = 'created'
ordering = ['category', 'created']
save_on_top = True
readonly_fields = ['post_photo']
filter_horizontal = ['tags']
fieldsets = (
('Основная информация', {
'fields': ('title', 'slug', 'category', 'author', 'status', 'fixed')
}),
('Содержание', {
'fields': ('content', 'video'),
'classes': ('wide',)
}),
('Медиа', {
'fields': ('kartinka', 'post_photo'),
'classes': ('wide',)
}),
('Метаданные', {
'fields': ('tags',),
'classes': ('collapse',)
}),
('Telegram', {
'fields': ('telegram_posted_at', 'description'),
'classes': ('collapse',)
}),
)
@admin.display(description="Изображение", ordering='content')
def post_photo(self, Blog: Post):
if Blog.kartinka:
return mark_safe(f"<img src='{Blog.kartinka.url}' width=100>")
return "Без фото"
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
"""
Админ-панель модели комментариев
"""
list_display = ('author_comment', 'content', 'active', 'email', 'post', 'created')
list_filter = ('active', 'created', 'updated', 'post')
search_fields = ('author_comment', 'email', 'content', 'post')
Я внес следующие изменения, чтобы улучшить управление тегами в панели администратора:
Добавил filter_horizontal = ['теги'] в класс администратора Post. Это позволит:
Отображать теги в горизонтальном двухпанельном интерфейсе
Упростить выбор тегов из списка
Упростите добавление / удаление нескольких тегов одновременно
Обеспечьте функциональность поиска в списке тегов
В list_filter добавлены "теги", чтобы разрешить фильтрацию записей по тегам в режиме просмотра списка администратора.
Теперь в панели администратора при редактировании записи:
Поле теги будет отображаться в виде двух расположенных рядом полей
Доступные теги будут в левом поле
Выбранные теги будут в правом поле
Ты можешь:
Нажимайте на теги, чтобы перемещать их между полями
Используйте поле поиска, чтобы найти определенные теги
Выберите несколько тегов одновременно
Легко просматривайте, какие теги уже назначены
Это делает управление тегами намного более удобным для пользователя, чем поле ввода текста по умолчанию. Хотите ли вы, чтобы я внес какие-либо коррективы в эту реализацию?
Пока комментариев нет.