Добавил форму для отправки данных

This commit is contained in:
2025-11-26 17:35:59 +03:00
parent 27694a3a7d
commit cfaaae9360
7 changed files with 671 additions and 152 deletions

View File

@@ -0,0 +1,101 @@
"""
Data entry view for satellite points.
"""
import json
import re
from datetime import datetime
from django.contrib.auth.mixins import LoginRequiredMixin
from django.db.models import Q
from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from ..models import ObjItem, Satellite
class DataEntryView(LoginRequiredMixin, View):
"""
View for data entry form with Tabulator table.
"""
def get(self, request):
# Get satellites that have points
satellites = Satellite.objects.filter(
parameters__objitem__isnull=False
).distinct().order_by('name')
context = {
'satellites': satellites,
"full_width_page": True
}
return render(request, 'mainapp/data_entry.html', context)
class SearchObjItemAPIView(LoginRequiredMixin, View):
"""
API endpoint for searching ObjItem by name.
Returns first matching ObjItem with all required data.
"""
def get(self, request):
name = request.GET.get('name', '').strip()
satellite_id = request.GET.get('satellite_id', '').strip()
if not name:
return JsonResponse({'error': 'Name parameter is required'}, status=400)
# Build query
query = Q(name__iexact=name)
# Add satellite filter if provided
if satellite_id:
try:
sat_id = int(satellite_id)
query &= Q(parameter_obj__id_satellite_id=sat_id)
except (ValueError, TypeError):
pass
# Search for ObjItem
objitem = ObjItem.objects.filter(query).select_related(
'parameter_obj',
'parameter_obj__id_satellite',
'parameter_obj__polarization',
'parameter_obj__modulation',
'parameter_obj__standard',
'geo_obj'
).prefetch_related(
'geo_obj__mirrors'
).first()
if not objitem:
return JsonResponse({'found': False})
# Prepare response data
data = {
'found': True,
'frequency': None,
'freq_range': None,
'bod_velocity': None,
'modulation': None,
'snr': None,
'mirrors': None,
}
# Get parameter data
if hasattr(objitem, 'parameter_obj') and objitem.parameter_obj:
param = objitem.parameter_obj
data['frequency'] = param.frequency if param.frequency else None
data['freq_range'] = param.freq_range if param.freq_range else None
data['bod_velocity'] = param.bod_velocity if param.bod_velocity else None
data['modulation'] = param.modulation.name if param.modulation else None
data['snr'] = param.snr if param.snr else None
# Get mirrors data
if hasattr(objitem, 'geo_obj') and objitem.geo_obj:
mirrors = objitem.geo_obj.mirrors.all()
if mirrors:
data['mirrors'] = ', '.join([m.name for m in mirrors])
return JsonResponse(data)