Визуальные изменение. Доработки и фиксы багов

This commit is contained in:
2025-12-12 15:08:10 +03:00
parent f5875e5b87
commit 9bf701f05a
26 changed files with 1923 additions and 419 deletions

View File

@@ -61,7 +61,9 @@ class SourceListView(LoginRequiredMixin, View):
selected_satellites = request.GET.getlist("satellite_id")
selected_polarizations = request.GET.getlist("polarization_id")
selected_modulations = request.GET.getlist("modulation_id")
selected_standards = request.GET.getlist("standard_id")
selected_mirrors = request.GET.getlist("mirror_id")
selected_complexes = request.GET.getlist("complex_id")
freq_min = request.GET.get("freq_min", "").strip()
freq_max = request.GET.get("freq_max", "").strip()
freq_range_min = request.GET.get("freq_range_min", "").strip()
@@ -96,10 +98,11 @@ class SourceListView(LoginRequiredMixin, View):
.order_by("name")
)
# Get all polarizations, modulations for filters
from ..models import Polarization, Modulation, ObjectInfo
# Get all polarizations, modulations, standards for filters
from ..models import Polarization, Modulation, ObjectInfo, Standard
polarizations = Polarization.objects.all().order_by("name")
modulations = Modulation.objects.all().order_by("name")
standards = Standard.objects.all().order_by("name")
# Get all ObjectInfo for filter
object_infos = ObjectInfo.objects.all().order_by("name")
@@ -167,6 +170,11 @@ class SourceListView(LoginRequiredMixin, View):
objitem_filter_q &= Q(source_objitems__parameter_obj__modulation_id__in=selected_modulations)
has_objitem_filter = True
# Add standard filter
if selected_standards:
objitem_filter_q &= Q(source_objitems__parameter_obj__standard_id__in=selected_standards)
has_objitem_filter = True
# Add frequency filter
if freq_min:
try:
@@ -240,6 +248,11 @@ class SourceListView(LoginRequiredMixin, View):
objitem_filter_q &= Q(source_objitems__geo_obj__mirrors__id__in=selected_mirrors)
has_objitem_filter = True
# Add complex filter
if selected_complexes:
objitem_filter_q &= Q(source_objitems__parameter_obj__id_satellite__location_place__in=selected_complexes)
has_objitem_filter = True
# Add polygon filter
if polygon_geom:
objitem_filter_q &= Q(source_objitems__geo_obj__coords__within=polygon_geom)
@@ -291,6 +304,8 @@ class SourceListView(LoginRequiredMixin, View):
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__polarization_id__in=selected_polarizations)
if selected_modulations:
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__modulation_id__in=selected_modulations)
if selected_standards:
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__standard_id__in=selected_standards)
if freq_min:
try:
freq_min_val = float(freq_min)
@@ -341,6 +356,8 @@ class SourceListView(LoginRequiredMixin, View):
pass
if selected_mirrors:
filtered_objitems_qs = filtered_objitems_qs.filter(geo_obj__mirrors__id__in=selected_mirrors)
if selected_complexes:
filtered_objitems_qs = filtered_objitems_qs.filter(parameter_obj__id_satellite__location_place__in=selected_complexes)
if polygon_geom:
filtered_objitems_qs = filtered_objitems_qs.filter(geo_obj__coords__within=polygon_geom)
@@ -548,6 +565,12 @@ class SourceListView(LoginRequiredMixin, View):
source_objitems__parameter_obj__modulation_id__in=selected_modulations
).distinct()
# Filter by standards
if selected_standards:
sources = sources.filter(
source_objitems__parameter_obj__standard_id__in=selected_standards
).distinct()
# Filter by frequency range
if freq_min:
try:
@@ -614,6 +637,12 @@ class SourceListView(LoginRequiredMixin, View):
source_objitems__geo_obj__mirrors__id__in=selected_mirrors
).distinct()
# Filter by complex
if selected_complexes:
sources = sources.filter(
source_objitems__parameter_obj__id_satellite__location_place__in=selected_complexes
).distinct()
# Filter by polygon
if polygon_geom:
sources = sources.filter(
@@ -760,6 +789,10 @@ class SourceListView(LoginRequiredMixin, View):
'selected_modulations': [
int(x) if isinstance(x, str) else x for x in selected_modulations if (isinstance(x, int) or (isinstance(x, str) and x.isdigit()))
],
'standards': standards,
'selected_standards': [
int(x) if isinstance(x, str) else x for x in selected_standards if (isinstance(x, int) or (isinstance(x, str) and x.isdigit()))
],
'freq_min': freq_min,
'freq_max': freq_max,
'freq_range_min': freq_range_min,
@@ -772,6 +805,9 @@ class SourceListView(LoginRequiredMixin, View):
'selected_mirrors': [
int(x) if isinstance(x, str) else x for x in selected_mirrors if (isinstance(x, int) or (isinstance(x, str) and x.isdigit()))
],
# Complex filter choices
'complexes': [('kr', 'КР'), ('dv', 'ДВ')],
'selected_complexes': selected_complexes,
'object_infos': object_infos,
'polygon_coords': json.dumps(polygon_coords) if polygon_coords else None,
'full_width_page': True,
@@ -1113,12 +1149,7 @@ class MergeSourcesView(LoginRequiredMixin, AdminModeratorMixin, View):
target_source.update_confirm_at()
target_source.save()
# Delete sources_to_merge (without cascade deleting objitems since we moved them)
# We need to delete marks first (they have CASCADE)
from ..models import ObjectMark
ObjectMark.objects.filter(source__in=sources_to_merge).delete()
# Now delete the sources
# Delete sources_to_merge (objitems already moved to target)
deleted_count = sources_to_merge.count()
sources_to_merge.delete()