import os from django.contrib import admin from .models import Company, EmployeeProfile, Machine, Deal, Material, Item # --- Настройка отображения Компаний --- @admin.register(Company) class CompanyAdmin(admin.ModelAdmin): list_display = ('name', 'description') search_fields = ('name',) # --- Настройка отображения Сделок --- @admin.register(Deal) class DealAdmin(admin.ModelAdmin): list_display = ('number', 'company') search_fields = ('number', 'company__name') list_filter = ('company',) # --- Настройка отображения Материалов --- @admin.register(Material) class MaterialAdmin(admin.ModelAdmin): search_fields = ('name',) # --- ГЛАВНАЯ МАГИЯ: Сменные задания --- @admin.register(Item) class ItemAdmin(admin.ModelAdmin): # Что видим в общем списке list_display = ('date', 'machine', 'deal', 'drawing_name', 'quantity_plan', 'quantity_fact', 'status', 'is_synced_1c') # Фильтры справа list_filter = ('date', 'machine', 'status', 'is_synced_1c', 'deal') # Поиск по номеру сделки и названию детали search_fields = ('drawing_name', 'deal__number') # Группируем поля в форме редактирования для удобства fieldsets = ( ('Основная информация', { 'fields': ('date', 'machine', 'deal', 'status') }), ('Чертеж и параметры', { 'fields': ('drawing_file', 'drawing_name', 'size_value', 'extra_drawing', 'material', 'quantity_plan', 'is_bend') }), ('Исполнение (Оператор)', { 'fields': ('operator', 'quantity_fact', 'material_taken', 'usable_waste', 'scrap_weight', 'is_synced_1c') }), ) def save_model(self, request, obj, form, change): """ Переопределяем сохранение, чтобы автоматизировать заполнение полей. """ # 1. Если имя детали "Б/ч" или пустое, а файл загружен — берем имя из файла if (obj.drawing_name == "Б/ч" or not obj.drawing_name) and obj.drawing_file: filename = os.path.basename(obj.drawing_file.name) obj.drawing_name = os.path.splitext(filename)[0] # Отрезаем .dxf или .step # 2. Логика запоминания последней сделки (через сессию браузера) if obj.deal: request.session['last_deal_id'] = obj.deal.id super().save_model(request, obj, form, change) def get_changeform_initial_data(self, request): """ Подставляем последнюю выбранную сделку в новую форму. """ initial = super().get_changeform_initial_data(request) if 'last_deal_id' in request.session: initial['deal'] = request.session['last_deal_id'] return initial # Регистрация станков просто списком admin.site.register(Machine) @admin.register(EmployeeProfile) class EmployeeProfileAdmin(admin.ModelAdmin): list_display = ('user', 'role') filter_horizontal = ('machines',) # Красивый выбор станков двумя колонками