from django.contrib import admin from django.db import models from .models import Customer class IsSystemCustomerFilter(admin.SimpleListFilter): title = 'Системный клиент' parameter_name = 'is_system_customer' def lookups(self, request, model_admin): return ( ('yes', 'Системный'), ('no', 'Обычный'), ) def queryset(self, request, queryset): if self.value() == 'yes': return queryset.filter(is_system_customer=True) if self.value() == 'no': return queryset.filter(is_system_customer=False) return queryset @admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): """Административный интерфейс для управления клиентами цветочного магазина""" list_display = ( 'full_name', 'email', 'phone', 'total_spent', 'is_system_customer', 'created_at' ) list_filter = ( IsSystemCustomerFilter, 'created_at' ) search_fields = ( 'name', 'email', 'phone' ) date_hierarchy = 'created_at' ordering = ('-created_at',) readonly_fields = ('created_at', 'updated_at', 'total_spent', 'is_system_customer') fieldsets = ( ('Основная информация', { 'fields': ('name', 'email', 'phone', 'is_system_customer') }), ('Статистика покупок', { 'fields': ('total_spent',), 'classes': ('collapse',) }), ('Заметки', { 'fields': ('notes',) }), ('Даты', { 'fields': ('created_at', 'updated_at'), 'classes': ('collapse',) }), ) def get_readonly_fields(self, request, obj=None): """Делаем все поля read-only для системного клиента""" if obj and obj.is_system_customer: # Для системного клиента все поля только для чтения return ['name', 'email', 'phone', 'total_spent', 'is_system_customer', 'notes', 'created_at', 'updated_at'] return self.readonly_fields def has_delete_permission(self, request, obj=None): """Запрет на удаление системного клиента""" if obj and obj.is_system_customer: return False return super().has_delete_permission(request, obj) def changeform_view(self, request, object_id=None, form_url='', extra_context=None): """Добавляем предупреждение для системного клиента""" extra_context = extra_context or {} if object_id: obj = self.get_object(request, object_id) if obj and obj.is_system_customer: extra_context['readonly'] = True from django.contrib import messages messages.warning(request, 'Это системный клиент. Редактирование запрещено для обеспечения корректной работы системы.') return super().changeform_view(request, object_id, form_url, extra_context)