Добавил форму для отправки данных
This commit is contained in:
@@ -59,6 +59,10 @@ from .kubsat import (
|
||||
KubsatView,
|
||||
KubsatExportView,
|
||||
)
|
||||
from .data_entry import (
|
||||
DataEntryView,
|
||||
SearchObjItemAPIView,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
# Base
|
||||
@@ -122,4 +126,7 @@ __all__ = [
|
||||
# Kubsat
|
||||
'KubsatView',
|
||||
'KubsatExportView',
|
||||
# Data Entry
|
||||
'DataEntryView',
|
||||
'SearchObjItemAPIView',
|
||||
]
|
||||
|
||||
101
dbapp/mainapp/views/data_entry.py
Normal file
101
dbapp/mainapp/views/data_entry.py
Normal 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)
|
||||
Reference in New Issue
Block a user