/
HitriyKrab
/
DjangoProjectShop
Обзор
Документация
Войти
/
HitriyKrab
/
DjangoProjectShop
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MyShop/admin.py
87 строк
4 KB
ХитрыйКраб
Добавлено: ограниченный тираж и популярные товары для стартовой страницы
16 ноя 2025, 15:22
16 ноя 2025, 15:22
ed89bf2
Код
Авторство
О чём код?
from django.contrib import admin from .models import Product, Order, Review, Category, DeliverySettings # Отображение товаров, добавленных в заказ (метод Tabular) - для ЗАКАЗА class ProductInline(admin.TabularInline): model = Order.products.through # Отображение заказов, в которых есть товар (метод Stacked) - для ТОВАРА class OrderInline(admin.StackedInline): model = Product.orders.through # Подключаем "Категории товаров к админке" @admin.register(Category) class CategoryAdmin(admin.ModelAdmin): list_display = 'name', 'slug' list_display_links = 'name', # Подключаем "Товар" к админке @admin.register(Product) class ProductAdmin(admin.ModelAdmin): #Поля, отображенные у товаров в админке list_display = 'name', 'description_short', 'price', 'created_at' #Поля в админке, которые будут ссылками на просмотр товара list_display_links = 'name', 'price' #Сортировка артефактов В АДМИНКЕ ordering = ['-price', 'name'] #Поля для поиска в админке по записям/артефактам search_fields = 'name', 'description' inlines = [OrderInline] #Группировка полей по их особенностям fieldsets = [ ('Детали товара', {'fields': ('name', 'description', 'preview', 'category', 'limited_edition')}), ('Особенности цены', {'fields': ('price', 'discount'), 'classes': ('collapse', 'wide'), 'description': 'Ценовые особенности артефакта'}), ] #Сокращенное описание артефакта в админке def description_short(self, obj: Product) -> str: if len(obj.description) <= 49: return obj.description else: return obj.description[:49] + '...' # Подключаем "Заказ" к админке @admin.register(Order) class OrderAdmin(admin.ModelAdmin): list_display = "delivery_address", "created_at", "user" list_display_links = 'delivery_address', "created_at", "user" inlines = [ProductInline,] # Оптимизация запроса подгрузки пользователей и товаров к заказу def get_queryset(self, request): # Пользователи и товары подгружаются ко всем заказам сразу, а не по отдельности return Order.objects.select_related("user").prefetch_related("products") # Подключаем "Отзывы" к админке @admin.register(Review) class ReviewAdmin(admin.ModelAdmin): list_display = 'product', 'user', 'comment_short', 'created_at' list_display_links = 'product', 'user', 'created_at' def comment_short(self, obj: Product) -> str: if len(obj.comment) <= 49: return obj.comment else: return obj.comment[:49] + '...' # Подключаем настройки доставки к админке (нужно по условию) @admin.register(DeliverySettings) class DeliverySettingsAdmin(admin.ModelAdmin): list_display = ('standard_delivery_price', 'free_delivery_threshold', 'express_delivery_extra_price') list_display_links = ('standard_delivery_price', 'free_delivery_threshold', 'express_delivery_extra_price')