Поправил админку для новой модели
This commit is contained in:
@@ -854,6 +854,67 @@ class BandAdmin(ImportExportActionModelAdmin, BaseAdmin):
|
||||
ordering = ("name",)
|
||||
|
||||
|
||||
class ObjItemInline(admin.TabularInline):
|
||||
"""Inline для отображения объектов ObjItem в Source."""
|
||||
model = ObjItem
|
||||
fk_name = "source"
|
||||
extra = 0
|
||||
can_delete = False
|
||||
verbose_name = "Объект"
|
||||
verbose_name_plural = "Объекты"
|
||||
|
||||
fields = ("name", "get_geo_coords", "get_satellite", "get_frequency", "get_polarization", "updated_at")
|
||||
readonly_fields = ("name", "get_geo_coords", "get_satellite", "get_frequency", "get_polarization", "updated_at")
|
||||
|
||||
def get_queryset(self, request):
|
||||
"""Оптимизированный queryset с предзагрузкой связанных объектов."""
|
||||
qs = super().get_queryset(request)
|
||||
return qs.select_related(
|
||||
'geo_obj',
|
||||
'parameter_obj',
|
||||
'parameter_obj__id_satellite',
|
||||
'parameter_obj__polarization'
|
||||
)
|
||||
|
||||
def get_geo_coords(self, obj):
|
||||
"""Отображает координаты из связанной модели Geo."""
|
||||
if not obj or not hasattr(obj, 'geo_obj'):
|
||||
return "-"
|
||||
geo = obj.geo_obj
|
||||
if not geo or not geo.coords:
|
||||
return "-"
|
||||
longitude = geo.coords.coords[0]
|
||||
latitude = geo.coords.coords[1]
|
||||
lon = f"{longitude}E" if longitude > 0 else f"{abs(longitude)}W"
|
||||
lat = f"{latitude}N" if latitude > 0 else f"{abs(latitude)}S"
|
||||
return f"{lat} {lon}"
|
||||
get_geo_coords.short_description = "Координаты"
|
||||
|
||||
def get_satellite(self, obj):
|
||||
"""Отображает спутник из связанного параметра."""
|
||||
if hasattr(obj, 'parameter_obj') and obj.parameter_obj and obj.parameter_obj.id_satellite:
|
||||
return obj.parameter_obj.id_satellite.name
|
||||
return "-"
|
||||
get_satellite.short_description = "Спутник"
|
||||
|
||||
def get_frequency(self, obj):
|
||||
"""Отображает частоту из связанного параметра."""
|
||||
if hasattr(obj, 'parameter_obj') and obj.parameter_obj:
|
||||
return obj.parameter_obj.frequency
|
||||
return "-"
|
||||
get_frequency.short_description = "Частота, МГц"
|
||||
|
||||
def get_polarization(self, obj):
|
||||
"""Отображает поляризацию из связанного параметра."""
|
||||
if hasattr(obj, 'parameter_obj') and obj.parameter_obj and obj.parameter_obj.polarization:
|
||||
return obj.parameter_obj.polarization.name
|
||||
return "-"
|
||||
get_polarization.short_description = "Поляризация"
|
||||
|
||||
def has_add_permission(self, request, obj=None):
|
||||
return False
|
||||
|
||||
|
||||
@admin.register(Source)
|
||||
class SourceAdmin(ImportExportActionModelAdmin, LeafletGeoAdmin, BaseAdmin):
|
||||
"""Админ-панель для модели Source."""
|
||||
@@ -864,6 +925,7 @@ class SourceAdmin(ImportExportActionModelAdmin, LeafletGeoAdmin, BaseAdmin):
|
||||
)
|
||||
ordering = ("-created_at",)
|
||||
readonly_fields = ("created_at", "created_by", "updated_at", "updated_by")
|
||||
inlines = [ObjItemInline]
|
||||
|
||||
fieldsets = (
|
||||
("Координаты: геолокация", {
|
||||
|
||||
Reference in New Issue
Block a user