Добавил информацию о типе объекта. Просто фиксы

This commit is contained in:
2025-11-17 15:54:27 +03:00
parent f438e74946
commit b889fb29a3
20 changed files with 1086 additions and 134 deletions

View File

@@ -7,6 +7,7 @@ from django.utils import timezone
from django.views import View
from ..models import ObjItem
from ..utils import format_coordinate, format_coords_display, format_frequency, format_symbol_rate
class GetLocationsView(LoginRequiredMixin, View):
@@ -76,11 +77,11 @@ class LyngsatDataAPIView(LoginRequiredMixin, View):
data = {
'id': lyngsat.id,
'satellite': lyngsat.id_satellite.name if lyngsat.id_satellite else '-',
'frequency': f"{lyngsat.frequency:.3f}" if lyngsat.frequency else '-',
'frequency': format_frequency(lyngsat.frequency),
'polarization': lyngsat.polarization.name if lyngsat.polarization else '-',
'modulation': lyngsat.modulation.name if lyngsat.modulation else '-',
'standard': lyngsat.standard.name if lyngsat.standard else '-',
'sym_velocity': f"{lyngsat.sym_velocity:.0f}" if lyngsat.sym_velocity else '-',
'sym_velocity': format_symbol_rate(lyngsat.sym_velocity),
'fec': lyngsat.fec or '-',
'channel_info': lyngsat.channel_info or '-',
'last_update': last_update_str,
@@ -146,13 +147,13 @@ class SigmaParameterDataAPIView(LoginRequiredMixin, View):
sigma_data.append({
'id': sigma.id,
'satellite': sigma.id_satellite.name if sigma.id_satellite else '-',
'frequency': f"{sigma.frequency:.3f}" if sigma.frequency else '-',
'transfer_frequency': f"{sigma.transfer_frequency:.3f}" if sigma.transfer_frequency else '-',
'freq_range': f"{sigma.freq_range:.3f}" if sigma.freq_range else '-',
'frequency': format_frequency(sigma.frequency),
'transfer_frequency': format_frequency(sigma.transfer_frequency),
'freq_range': format_frequency(sigma.freq_range),
'polarization': sigma.polarization.name if sigma.polarization else '-',
'modulation': sigma.modulation.name if sigma.modulation else '-',
'standard': sigma.standard.name if sigma.standard else '-',
'bod_velocity': f"{sigma.bod_velocity:.0f}" if sigma.bod_velocity else '-',
'bod_velocity': format_symbol_rate(sigma.bod_velocity),
'snr': f"{sigma.snr:.1f}" if sigma.snr is not None else '-',
'power': f"{sigma.power:.1f}" if sigma.power is not None else '-',
'status': sigma.status or '-',
@@ -235,6 +236,7 @@ class SourceObjItemsAPIView(LoginRequiredMixin, View):
# Get parameter data
param = getattr(objitem, 'parameter_obj', None)
satellite_name = '-'
satellite_id = None
frequency = '-'
freq_range = '-'
polarization = '-'
@@ -248,11 +250,12 @@ class SourceObjItemsAPIView(LoginRequiredMixin, View):
parameter_id = param.id
if hasattr(param, 'id_satellite') and param.id_satellite:
satellite_name = param.id_satellite.name
frequency = f"{param.frequency:.3f}" if param.frequency is not None else '-'
freq_range = f"{param.freq_range:.3f}" if param.freq_range is not None else '-'
satellite_id = param.id_satellite.id
frequency = format_frequency(param.frequency)
freq_range = format_frequency(param.freq_range)
if hasattr(param, 'polarization') and param.polarization:
polarization = param.polarization.name
bod_velocity = f"{param.bod_velocity:.0f}" if param.bod_velocity is not None else '-'
bod_velocity = format_symbol_rate(param.bod_velocity)
if hasattr(param, 'modulation') and param.modulation:
modulation = param.modulation.name
if hasattr(param, 'standard') and param.standard:
@@ -272,11 +275,7 @@ class SourceObjItemsAPIView(LoginRequiredMixin, View):
geo_location = objitem.geo_obj.location or '-'
if objitem.geo_obj.coords:
longitude = objitem.geo_obj.coords.coords[0]
latitude = objitem.geo_obj.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"
geo_coords = f"{lat} {lon}"
geo_coords = format_coords_display(objitem.geo_obj.coords)
# Get created/updated info
created_at = '-'
@@ -332,6 +331,7 @@ class SourceObjItemsAPIView(LoginRequiredMixin, View):
'id': objitem.id,
'name': objitem.name or '-',
'satellite_name': satellite_name,
'satellite_id': satellite_id,
'frequency': frequency,
'freq_range': freq_range,
'polarization': polarization,
@@ -454,12 +454,12 @@ class TransponderDataAPIView(LoginRequiredMixin, View):
'id': transponder.id,
'name': transponder.name or '-',
'satellite': transponder.sat_id.name if transponder.sat_id else '-',
'downlink': f"{transponder.downlink:.3f}" if transponder.downlink else '-',
'uplink': f"{transponder.uplink:.3f}" if transponder.uplink else None,
'frequency_range': f"{transponder.frequency_range:.3f}" if transponder.frequency_range else '-',
'downlink': format_frequency(transponder.downlink),
'uplink': format_frequency(transponder.uplink) if transponder.uplink else None,
'frequency_range': format_frequency(transponder.frequency_range),
'polarization': transponder.polarization.name if transponder.polarization else '-',
'zone_name': transponder.zone_name or '-',
'transfer': f"{transponder.transfer:.3f}" if transponder.transfer else None,
'transfer': format_frequency(transponder.transfer) if transponder.transfer else None,
'snr': f"{transponder.snr:.1f}" if transponder.snr is not None else None,
'created_at': created_at_str,
'created_by': created_by_str,
@@ -470,3 +470,57 @@ class TransponderDataAPIView(LoginRequiredMixin, View):
return JsonResponse({'error': 'Транспондер не найден'}, status=404)
except Exception as e:
return JsonResponse({'error': str(e)}, status=500)
class SatelliteDataAPIView(LoginRequiredMixin, View):
"""API endpoint for getting Satellite data."""
def get(self, request, satellite_id):
from ..models import Satellite
try:
satellite = Satellite.objects.prefetch_related(
'band',
'created_by__user',
'updated_by__user'
).get(id=satellite_id)
# Format dates
created_at_str = '-'
if satellite.created_at:
local_time = timezone.localtime(satellite.created_at)
created_at_str = local_time.strftime("%d.%m.%Y %H:%M")
updated_at_str = '-'
if satellite.updated_at:
local_time = timezone.localtime(satellite.updated_at)
updated_at_str = local_time.strftime("%d.%m.%Y %H:%M")
launch_date_str = '-'
if satellite.launch_date:
launch_date_str = satellite.launch_date.strftime("%d.%m.%Y")
# Get bands
bands_list = list(satellite.band.values_list('name', flat=True))
bands_str = ', '.join(bands_list) if bands_list else '-'
data = {
'id': satellite.id,
'name': satellite.name,
'norad': satellite.norad if satellite.norad else '-',
'undersat_point': f"{satellite.undersat_point}°" if satellite.undersat_point is not None else '-',
'bands': bands_str,
'launch_date': launch_date_str,
'url': satellite.url or None,
'comment': satellite.comment or '-',
'created_at': created_at_str,
'created_by': str(satellite.created_by) if satellite.created_by else '-',
'updated_at': updated_at_str,
'updated_by': str(satellite.updated_by) if satellite.updated_by else '-',
}
return JsonResponse(data)
except Satellite.DoesNotExist:
return JsonResponse({'error': 'Спутник не найден'}, status=404)
except Exception as e:
return JsonResponse({'error': str(e)}, status=500)