68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
# Django imports
|
||
from django.contrib import admin
|
||
|
||
# Third-party imports
|
||
from import_export.admin import ImportExportActionModelAdmin
|
||
from more_admin_filters import MultiSelectRelatedDropdownFilter
|
||
from rangefilter.filters import NumericRangeFilterBuilder
|
||
|
||
# Local imports
|
||
from .models import Transponders
|
||
|
||
|
||
# ============================================================================
|
||
# Base Admin Classes
|
||
# ============================================================================
|
||
|
||
class BaseAdmin(admin.ModelAdmin):
|
||
"""
|
||
Базовый класс для всех admin моделей mapsapp.
|
||
|
||
Предоставляет общую функциональность:
|
||
- Кнопки сохранения сверху и снизу
|
||
- Настройка количества элементов на странице
|
||
"""
|
||
save_on_top = True
|
||
list_per_page = 50
|
||
|
||
|
||
# ============================================================================
|
||
# Admin Classes
|
||
# ============================================================================
|
||
|
||
@admin.register(Transponders)
|
||
class TranspondersAdmin(ImportExportActionModelAdmin, BaseAdmin):
|
||
"""
|
||
Админ-панель для модели Transponders.
|
||
|
||
Оптимизирована для работы с транспондерами:
|
||
- Использует select_related для оптимизации запросов
|
||
- Предоставляет фильтры по спутникам, поляризации и зоне
|
||
- Поддерживает импорт/экспорт данных
|
||
"""
|
||
list_display = (
|
||
"sat_id",
|
||
"name",
|
||
"zone_name",
|
||
"downlink",
|
||
"uplink",
|
||
"frequency_range",
|
||
"transfer",
|
||
"polarization",
|
||
)
|
||
list_display_links = ("name",)
|
||
list_select_related = ("polarization", "sat_id")
|
||
|
||
list_filter = (
|
||
("polarization", MultiSelectRelatedDropdownFilter),
|
||
("sat_id", MultiSelectRelatedDropdownFilter),
|
||
("downlink", NumericRangeFilterBuilder()),
|
||
("uplink", NumericRangeFilterBuilder()),
|
||
("frequency_range", NumericRangeFilterBuilder()),
|
||
"zone_name",
|
||
)
|
||
|
||
search_fields = ("name", "sat_id__name", "zone_name")
|
||
ordering = ("name",)
|
||
autocomplete_fields = ("sat_id", "polarization")
|