Новый визуальный функционал

This commit is contained in:
2025-11-10 14:56:21 +03:00
parent a0f20f9a60
commit 9e9468ed34
8 changed files with 1036 additions and 38 deletions

View File

@@ -724,6 +724,9 @@ class ObjItemListView(LoginRequiredMixin, View):
bod_velocity = "-"
modulation_name = "-"
snr = "-"
standard_name = "-"
comment = "-"
is_average = "-"
if param:
if hasattr(param, "id_satellite") and param.id_satellite:
@@ -760,6 +763,17 @@ class ObjItemListView(LoginRequiredMixin, View):
else "-"
)
if hasattr(param, "standard") and param.standard:
standard_name = (
param.standard.name
if hasattr(param.standard, "name")
else "-"
)
if hasattr(obj, "geo_obj") and obj.geo_obj:
comment = obj.geo_obj.comment or "-"
is_average = "Да" if obj.geo_obj.is_average else "Нет" if obj.geo_obj.is_average is not None else "-"
processed_objects.append(
{
"id": obj.id,
@@ -780,6 +794,9 @@ class ObjItemListView(LoginRequiredMixin, View):
"distance_geo_valid": distance_geo_valid,
"distance_kup_valid": distance_kup_valid,
"updated_by": obj.updated_by if obj.updated_by else "-",
"comment": comment,
"is_average": is_average,
"standard": standard_name,
"obj": obj,
}
)
@@ -840,10 +857,11 @@ class ObjItemFormView(
def get_success_url(self):
"""Возвращает URL с сохраненными параметрами фильтров."""
# Получаем сохраненные параметры из GET запроса
return_params = self.request.GET.get('return_params', '')
if return_params:
return reverse_lazy("mainapp:objitem_list") + '?' + return_params
# Получаем все параметры из GET запроса и сохраняем их в URL
if self.request.GET:
from urllib.parse import urlencode
query_string = urlencode(self.request.GET)
return reverse_lazy("mainapp:objitem_list") + '?' + query_string
return reverse_lazy("mainapp:objitem_list")
def get_context_data(self, **kwargs):
@@ -890,7 +908,11 @@ class ObjItemFormView(
def form_valid(self, form):
context = self.get_context_data()
parameter_forms = context["parameter_forms"]
geo_form = context["geo_form"]
if self.object and hasattr(self.object, "geo_obj") and self.object.geo_obj:
geo_form = GeoForm(self.request.POST, instance=self.object.geo_obj, prefix="geo")
else:
geo_form = GeoForm(self.request.POST, prefix="geo")
# Сохраняем основной объект
self.object = form.save(commit=False)
@@ -902,7 +924,15 @@ class ObjItemFormView(
self.save_parameters(parameter_forms)
# Сохраняем геоданные
self.save_geo_data(geo_form)
if geo_form.is_valid():
self.save_geo_data(geo_form)
else:
context.update({
'form': form,
'parameter_forms': parameter_forms,
'geo_form': geo_form,
})
return self.render_to_response(context)
return super().form_valid(form)
@@ -1011,6 +1041,48 @@ class ObjItemCreateView(ObjItemFormView, CreateView):
class ObjItemDeleteView(RoleRequiredMixin, FormMessageMixin, DeleteView):
model = ObjItem
template_name = "mainapp/objitem_confirm_delete.html"
success_url = reverse_lazy("mainapp:home")
success_url = reverse_lazy("mainapp:objitem_list")
success_message = "Объект успешно удалён!"
required_roles = ["admin", "moderator"]
def get_success_url(self):
"""Возвращает URL с сохраненными параметрами фильтров."""
# Получаем все параметры из GET запроса и сохраняем их в URL
if self.request.GET:
from urllib.parse import urlencode
query_string = urlencode(self.request.GET)
return reverse_lazy("mainapp:objitem_list") + '?' + query_string
return reverse_lazy("mainapp:objitem_list")
class ObjItemDetailView(LoginRequiredMixin, View):
"""
Представление для просмотра деталей ObjItem в режиме чтения.
Доступно для всех авторизованных пользователей, показывает данные в режиме чтения.
"""
def get(self, request, pk):
obj = ObjItem.objects.filter(pk=pk).select_related(
'geo_obj',
'updated_by__user',
'created_by__user',
).prefetch_related(
'parameters_obj__id_satellite',
'parameters_obj__polarization',
'parameters_obj__modulation',
'parameters_obj__standard',
).first()
if not obj:
from django.http import Http404
raise Http404("Объект не найден")
# Сохраняем параметры возврата для кнопки "Назад"
return_params = request.GET.get('return_params', '')
context = {
'object': obj,
'return_params': return_params
}
return render(request, "mainapp/objitem_detail.html", context)