/
xayoki
/
web4sem
Обзор
Документация
Войти
/
xayoki
/
web4sem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
shop/admin.py
143 строки
5 KB
xayok7
Готовый проект
10 июн 2026, 01:10
10 июн 2026, 01:10
0c2081b
Код
Авторство
О чём код?
from django.contrib import admin from django.http import HttpResponse from .models import User, Category, Product, Order, OrderItem, Review, FavoriteItem, Cart, Supply, CartItem class OrderItemInline(admin.TabularInline): model = OrderItem raw_id_fields = ['product'] extra = 0 class CartItemInline(admin.TabularInline): model = CartItem raw_id_fields = ['product'] extra = 0 @admin.register(Product) class ProductAdmin(admin.ModelAdmin): list_display = ['name', 'category', 'price', 'stock', 'check_stock'] list_display_links = ['name'] list_filter = ['category__name', 'created_at'] search_fields = ['name', 'description', 'category__name'] raw_id_fields = ['category'] readonly_fields = ['created_at'] @admin.display(description='Статус склада', boolean=True) def check_stock(self, obj): return obj.stock > 0 @admin.register(User) class UserAdmin(admin.ModelAdmin): list_display = ['username', 'email', 'role', 'phone'] list_display_links = ['username'] list_filter = ['role', 'is_staff', 'is_active'] search_fields = ['username', 'phone', 'email'] filter_horizontal = ['groups', 'user_permissions'] @admin.register(Review) class ReviewAdmin(admin.ModelAdmin): list_display = ['id', 'product', 'user', 'client_phone', 'rating', 'created_at'] list_display_links = ['id', 'product'] list_filter = ['rating', 'created_at'] search_fields = ['user__username', 'user__phone', 'product__name', 'comment'] raw_id_fields = ['product', 'user'] readonly_fields = ['created_at'] @admin.display(description='Телефон') def client_phone(self, obj): return obj.user.phone if obj.user and obj.user.phone else "Нет данных" @admin.action(description='Скачать чек в PDF') def generate_pdf_invoice(modeladmin, request, queryset): import weasyprint order = queryset.first() if not order: return html_content = f""" <html> <body> <h1>Чек заказа №{order.id}</h1> <p>Клиент: {order.user.username}</p> <p>Сумма: {order.total} руб.</p> <p>Дата: {order.created_at}</p> </body> </html> """ response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="invoice_{order.id}.pdf"' weasyprint.HTML(string=html_content).write_pdf(response) return response @admin.action(description="Отметить выбранные как завершенные") def mark_as_done(modeladmin, request, queryset): queryset.update(status='done') @admin.register(Order) class OrderAdmin(admin.ModelAdmin): list_display = ['id', 'user', 'client_email', 'client_phone', 'total', 'status', 'created_at'] list_display_links = ['id'] list_filter = ['status', 'created_at'] date_hierarchy = 'created_at' inlines = [OrderItemInline] raw_id_fields = ['user'] search_fields = ['user__username', 'user__email', 'user__phone', 'address'] readonly_fields = ['created_at'] actions = [generate_pdf_invoice, mark_as_done] @admin.display(description='Email клиента') def client_email(self, obj): return obj.user.email @admin.display(description='Телефон') def client_phone(self, obj): return obj.user.phone @admin.register(Category) class CategoryAdmin(admin.ModelAdmin): list_display = ['id', 'name'] list_display_links = ['name'] search_fields = ['name'] @admin.register(FavoriteItem) class FavoriteItemAdmin(admin.ModelAdmin): list_display = ['id', 'user', 'client_email', 'client_phone', 'product', 'created_at'] list_display_links = ['id'] list_filter = ['created_at'] search_fields = ['user__username', 'user__email', 'user__phone', 'product__name'] raw_id_fields = ['user', 'product'] readonly_fields = ['created_at'] @admin.display(description='Email клиента') def client_email(self, obj): return obj.user.email @admin.display(description='Телефон') def client_phone(self, obj): return obj.user.phone @admin.register(Cart) class CartAdmin(admin.ModelAdmin): list_display = ['id', 'user', 'client_email', 'client_phone', 'session_id', 'created_at', 'updated_at'] list_display_links = ['id'] search_fields = ['user__username', 'user__email', 'user__phone', 'session_id'] raw_id_fields = ['user'] inlines = [CartItemInline] readonly_fields = ['created_at', 'updated_at'] @admin.display(description='Email клиента') def client_email(self, obj): return obj.user.email if obj.user else "Аноним" @admin.display(description='Телефон') def client_phone(self, obj): return obj.user.phone if obj.user else "Нет данных" @admin.register(Supply) class SupplyAdmin(admin.ModelAdmin): list_display = ['id', 'product', 'quantity', 'source', 'created_at'] list_filter = ['created_at'] search_fields = ['product__name', 'source'] raw_id_fields = ['product'] readonly_fields = ['created_at']