add: админ-панель (draft 01)
This commit is contained in:
@@ -1,3 +1,123 @@
|
||||
from django.contrib import admin
|
||||
# Кастомная конфигурация Django Admin для LPON сайта.
|
||||
# Регистрируем модели с удобным интерфейсом.
|
||||
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.models import User, Group
|
||||
from .models import (
|
||||
TbImage, TbArticle, TbArtist, TbItem, TbLabel, TbSeller,
|
||||
TbOffer, TbSource, TbOfferHistory, TbMusicStyle, TbFormat
|
||||
)
|
||||
|
||||
# ============================================================================
|
||||
# ModelAdmin классы для каждой модели
|
||||
# ============================================================================
|
||||
class ImageAdmin(admin.ModelAdmin):
|
||||
"""Админ для изображений"""
|
||||
list_display = ('id', 'l_img_source', 'l_img_reality', 'i_img_sort', 't_img_created')
|
||||
list_filter = ('l_img_source', 'l_img_reality', 't_img_created')
|
||||
ordering = ('-t_img_created', 'i_img_sort')
|
||||
readonly_fields = ('t_img_created', 't_img_updated')
|
||||
|
||||
|
||||
class ArticleAdmin(admin.ModelAdmin):
|
||||
"""Админ для статей"""
|
||||
list_display = ('id', 's_article_title', 'l_article_type', 'b_article_published', 't_article_created')
|
||||
list_filter = ('l_article_type', 'b_article_published', 't_article_created')
|
||||
search_fields = ('s_article_title', 'slug')
|
||||
prepopulated_fields = {'slug': ('s_article_title',)}
|
||||
readonly_fields = ('t_article_created', 't_article_updated')
|
||||
filter_horizontal = ('k_article_to_styles',)
|
||||
|
||||
|
||||
class MusicStyleAdmin(admin.ModelAdmin):
|
||||
"""Админ для музыкальных стилей"""
|
||||
list_display = ('id', 's_style_name', 's_style_slug')
|
||||
search_fields = ('s_style_name', 's_style_slug')
|
||||
readonly_fields = ('s_style_slug',)
|
||||
|
||||
|
||||
class FormatAdmin(admin.ModelAdmin):
|
||||
"""Админ для форматов"""
|
||||
list_display = ('id', 's_format', 's_format_slug')
|
||||
search_fields = ('s_format',)
|
||||
readonly_fields = ('s_format_slug',)
|
||||
|
||||
|
||||
class ArtistAdmin(admin.ModelAdmin):
|
||||
"""Админ для артистов"""
|
||||
list_display = ('id', 's_artist', 't_artist_created')
|
||||
search_fields = ('s_artist',)
|
||||
readonly_fields = ('t_artist_created', 't_artist_updated')
|
||||
|
||||
|
||||
class ItemAdmin(admin.ModelAdmin):
|
||||
"""Админ для товаров"""
|
||||
list_display = ('id', 's_item', 't_item_date', 't_item_created')
|
||||
list_filter = ('t_item_date', 't_item_created')
|
||||
search_fields = ('s_item',)
|
||||
filter_horizontal = ('k_item_to_artist',)
|
||||
readonly_fields = ('t_item_created', 't_item_updated')
|
||||
|
||||
|
||||
class LabelAdmin(admin.ModelAdmin):
|
||||
"""Админ для лейблов"""
|
||||
list_display = ('id', 's_label', 't_label_created')
|
||||
search_fields = ('s_label',)
|
||||
readonly_fields = ('t_label_created', 't_label_updated')
|
||||
|
||||
|
||||
class SellerAdmin(admin.ModelAdmin):
|
||||
"""Админ для продавцов"""
|
||||
list_display = ('id', 's_seller', 'l_seller_type', 't_seller_created')
|
||||
list_filter = ('l_seller_type',)
|
||||
search_fields = ('s_seller',)
|
||||
readonly_fields = ('t_seller_created', 't_seller_updated')
|
||||
|
||||
|
||||
class SourceAdmin(admin.ModelAdmin):
|
||||
"""Админ для источников"""
|
||||
list_display = ('id', 's_source_name', 'k_source_to_seller', 'l_source_type', 'l_source_currency', 't_source_data')
|
||||
list_filter = ('l_source_type', 'l_source_currency', 't_source_data')
|
||||
search_fields = ('s_source_name',)
|
||||
readonly_fields = ('t_source_created', 't_source_updated')
|
||||
|
||||
|
||||
class OfferAdmin(admin.ModelAdmin):
|
||||
"""Админ для предложений"""
|
||||
list_display = ('id', 's_offer', 'k_offer_to_item', 'f_offer_price', 'i_offer_quantity', 'i_offer_views')
|
||||
list_filter = ('l_offer_condition_media', 'l_offer_condition_sleeve', 't_offer_created')
|
||||
search_fields = ('s_offer',)
|
||||
filter_horizontal = ('k_offer_to_format', 'k_offer_to_image')
|
||||
readonly_fields = ('s_offer_skip32', 't_offer_created', 't_offer_updated', 'i_offer_views', 'i_offer_favorites')
|
||||
|
||||
|
||||
class OfferHistoryAdmin(admin.ModelAdmin):
|
||||
"""Админ для истории изменений офферов"""
|
||||
list_display = ('id', 'k_history_to_offer', 'f_history_price', 'i_history_quantity', 't_history_created')
|
||||
list_filter = ('t_history_created',)
|
||||
readonly_fields = ('t_history_created',)
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Регистрация моделей в дефолтном admin.site
|
||||
# ============================================================================
|
||||
admin.site.register(TbImage, ImageAdmin)
|
||||
admin.site.register(TbArticle, ArticleAdmin)
|
||||
admin.site.register(TbMusicStyle, MusicStyleAdmin)
|
||||
admin.site.register(TbFormat, FormatAdmin)
|
||||
admin.site.register(TbArtist, ArtistAdmin)
|
||||
admin.site.register(TbItem, ItemAdmin)
|
||||
admin.site.register(TbLabel, LabelAdmin)
|
||||
admin.site.register(TbSeller, SellerAdmin)
|
||||
admin.site.register(TbSource, SourceAdmin)
|
||||
admin.site.register(TbOffer, OfferAdmin)
|
||||
admin.site.register(TbOfferHistory, OfferHistoryAdmin)
|
||||
|
||||
# User и Group уже зарегистрированы auth приложением
|
||||
|
||||
# ============================================================================
|
||||
# Кастомизация админ-сайта через ready() в apps.py (переименование через verbose_name)
|
||||
# ============================================================================
|
||||
|
||||
|
||||
|
||||
# Register your models here.
|
||||
|
||||
@@ -7,6 +7,20 @@ class FrontendConfig(AppConfig):
|
||||
# Переключаем на стандартный AutoField (до 2 млрд записей)
|
||||
default_auto_field = 'django.db.models.AutoField'
|
||||
|
||||
# def ready(self):
|
||||
## Импортируем сигналы при запуске приложения
|
||||
def ready(self):
|
||||
"""
|
||||
Вызывается при инициализации приложения.
|
||||
Настраиваем админ-сайт (заголовки и т.п.)
|
||||
"""
|
||||
from django.contrib import admin
|
||||
admin.site.site_header = 'Управление LPON'
|
||||
admin.site.site_title = 'LPON Administrator'
|
||||
admin.site.index_title = 'Добро пожаловать в LPON'
|
||||
## Если надо, импортируем сигналы при запуске приложения
|
||||
# import myapp.signals
|
||||
|
||||
|
||||
# Добавляем кастомный конфиг для filer, чтобы переименовать verbose_name
|
||||
class CustomFilerConfig(AppConfig):
|
||||
name = 'filer'
|
||||
verbose_name = 'Медиафайлы' # Напишите здесь желаемое имя вкладки
|
||||
@@ -68,7 +68,9 @@ INSTALLED_APPS = [
|
||||
# Порядок важен! polymorphic должен быть ДО filer, easy_thumbnails тоже ДО filer
|
||||
'polymorphic',
|
||||
'easy_thumbnails',
|
||||
'filer',
|
||||
# 'filer',
|
||||
# Кастомная надстройка над filer для переопределения verbose_name (и других настроек)
|
||||
'frontend.apps.CustomFilerConfig',
|
||||
# Наше приложение
|
||||
'frontend.apps.FrontendConfig',
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user