Добавил формы создания и пофиксил баг с пользователями
This commit is contained in:
@@ -34,7 +34,7 @@ from .lyngsat import (
|
||||
ClearLyngsatCacheView,
|
||||
UnlinkAllLyngsatSourcesView,
|
||||
)
|
||||
from .source import SourceListView, SourceUpdateView, SourceDeleteView, DeleteSelectedSourcesView
|
||||
from .source import SourceListView, SourceCreateView, SourceUpdateView, SourceDeleteView, DeleteSelectedSourcesView
|
||||
from .transponder import (
|
||||
TransponderListView,
|
||||
TransponderCreateView,
|
||||
@@ -97,6 +97,7 @@ __all__ = [
|
||||
'UnlinkAllLyngsatSourcesView',
|
||||
# Source
|
||||
'SourceListView',
|
||||
'SourceCreateView',
|
||||
'SourceUpdateView',
|
||||
'SourceDeleteView',
|
||||
'DeleteSelectedSourcesView',
|
||||
|
||||
@@ -78,6 +78,7 @@ class LoadExcelDataView(LoginRequiredMixin, FormMessageMixin, FormView):
|
||||
uploaded_file = self.request.FILES["file"]
|
||||
selected_sat = form.cleaned_data["sat_choice"]
|
||||
number = form.cleaned_data["number_input"]
|
||||
is_automatic = form.cleaned_data.get("is_automatic", False)
|
||||
|
||||
try:
|
||||
import io
|
||||
@@ -85,11 +86,16 @@ class LoadExcelDataView(LoginRequiredMixin, FormMessageMixin, FormView):
|
||||
df = pd.read_excel(io.BytesIO(uploaded_file.read()))
|
||||
if number > 0:
|
||||
df = df.head(number)
|
||||
result = fill_data_from_df(df, selected_sat, self.request.user.customuser)
|
||||
result = fill_data_from_df(df, selected_sat, self.request.user.customuser, is_automatic)
|
||||
|
||||
messages.success(
|
||||
self.request, f"Данные успешно загружены! Обработано строк: {result}"
|
||||
)
|
||||
if is_automatic:
|
||||
messages.success(
|
||||
self.request, f"Данные успешно загружены как автоматические! Добавлено точек: {len(df)}"
|
||||
)
|
||||
else:
|
||||
messages.success(
|
||||
self.request, f"Данные успешно загружены! Создано источников: {result}"
|
||||
)
|
||||
except Exception as e:
|
||||
messages.error(self.request, f"Ошибка при обработке файла: {str(e)}")
|
||||
|
||||
@@ -109,12 +115,19 @@ class LoadCsvDataView(LoginRequiredMixin, FormMessageMixin, FormView):
|
||||
|
||||
def form_valid(self, form):
|
||||
uploaded_file = self.request.FILES["file"]
|
||||
is_automatic = form.cleaned_data.get("is_automatic", False)
|
||||
|
||||
try:
|
||||
content = uploaded_file.read()
|
||||
if isinstance(content, bytes):
|
||||
content = content.decode("utf-8")
|
||||
|
||||
get_points_from_csv(content, self.request.user.customuser)
|
||||
result = get_points_from_csv(content, self.request.user.customuser, is_automatic)
|
||||
|
||||
if is_automatic:
|
||||
messages.success(self.request, "Данные успешно загружены как автоматические!")
|
||||
else:
|
||||
messages.success(self.request, f"Данные успешно загружены! Создано источников: {result}")
|
||||
except Exception as e:
|
||||
messages.error(self.request, f"Ошибка при обработке файла: {str(e)}")
|
||||
return redirect("mainapp:load_csv_data")
|
||||
|
||||
@@ -286,6 +286,13 @@ class ObjItemListView(LoginRequiredMixin, View):
|
||||
elif has_sigma == "0":
|
||||
objects = objects.filter(parameter_obj__sigma_parameter__isnull=True)
|
||||
|
||||
# Filter by is_automatic
|
||||
is_automatic_filter = request.GET.get("is_automatic")
|
||||
if is_automatic_filter == "1":
|
||||
objects = objects.filter(is_automatic=True)
|
||||
elif is_automatic_filter == "0":
|
||||
objects = objects.filter(is_automatic=False)
|
||||
|
||||
if search_query:
|
||||
search_query = search_query.strip()
|
||||
if search_query:
|
||||
@@ -336,6 +343,8 @@ class ObjItemListView(LoginRequiredMixin, View):
|
||||
"-polarization": "-first_param_pol_name",
|
||||
"modulation": "first_param_mod_name",
|
||||
"-modulation": "-first_param_mod_name",
|
||||
"is_automatic": "is_automatic",
|
||||
"-is_automatic": "-is_automatic",
|
||||
}
|
||||
|
||||
# Apply sorting if valid, otherwise use default
|
||||
@@ -467,6 +476,7 @@ class ObjItemListView(LoginRequiredMixin, View):
|
||||
"has_sigma": has_sigma,
|
||||
"sigma_info": sigma_info,
|
||||
"mirrors": ", ".join(mirrors_list) if mirrors_list else "-",
|
||||
"is_automatic": "Да" if obj.is_automatic else "Нет",
|
||||
"obj": obj,
|
||||
}
|
||||
)
|
||||
@@ -477,6 +487,7 @@ class ObjItemListView(LoginRequiredMixin, View):
|
||||
# Get the new filter values
|
||||
has_source_type = request.GET.get("has_source_type")
|
||||
has_sigma = request.GET.get("has_sigma")
|
||||
is_automatic_filter = request.GET.get("is_automatic")
|
||||
|
||||
context = {
|
||||
"satellites": satellites,
|
||||
@@ -509,6 +520,7 @@ class ObjItemListView(LoginRequiredMixin, View):
|
||||
"date_to": date_to,
|
||||
"has_source_type": has_source_type,
|
||||
"has_sigma": has_sigma,
|
||||
"is_automatic": is_automatic_filter,
|
||||
"modulations": modulations,
|
||||
"polarizations": polarizations,
|
||||
"full_width_page": True,
|
||||
@@ -679,6 +691,10 @@ class ObjItemCreateView(ObjItemFormView, CreateView):
|
||||
|
||||
success_message = "Объект успешно создан!"
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
"""Return None for create view."""
|
||||
return None
|
||||
|
||||
def set_user_fields(self):
|
||||
self.object.created_by = self.request.user.customuser
|
||||
self.object.updated_by = self.request.user.customuser
|
||||
|
||||
@@ -752,6 +752,48 @@ class AdminModeratorMixin(UserPassesTestMixin):
|
||||
return redirect('mainapp:source_list')
|
||||
|
||||
|
||||
class SourceCreateView(LoginRequiredMixin, AdminModeratorMixin, View):
|
||||
"""View for creating new Source."""
|
||||
|
||||
def get(self, request):
|
||||
form = SourceForm()
|
||||
|
||||
context = {
|
||||
'object': None,
|
||||
'form': form,
|
||||
'objitems': [],
|
||||
'full_width_page': True,
|
||||
}
|
||||
|
||||
return render(request, 'mainapp/source_form.html', context)
|
||||
|
||||
def post(self, request):
|
||||
form = SourceForm(request.POST)
|
||||
|
||||
if form.is_valid():
|
||||
source = form.save(commit=False)
|
||||
# Set created_by and updated_by to current user
|
||||
if hasattr(request.user, 'customuser'):
|
||||
source.created_by = request.user.customuser
|
||||
source.updated_by = request.user.customuser
|
||||
source.save()
|
||||
|
||||
messages.success(request, f'Источник #{source.id} успешно создан.')
|
||||
|
||||
# Redirect to edit page
|
||||
return redirect('mainapp:source_update', pk=source.id)
|
||||
|
||||
# If form is invalid, re-render with errors
|
||||
context = {
|
||||
'object': None,
|
||||
'form': form,
|
||||
'objitems': [],
|
||||
'full_width_page': True,
|
||||
}
|
||||
|
||||
return render(request, 'mainapp/source_form.html', context)
|
||||
|
||||
|
||||
class SourceUpdateView(LoginRequiredMixin, AdminModeratorMixin, View):
|
||||
"""View for editing Source with 4 coordinate fields and related ObjItems."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user