Пофиксил баг с координатами
This commit is contained in:
@@ -534,13 +534,8 @@ class SourceForm(forms.ModelForm):
|
|||||||
|
|
||||||
instance = super().save(commit=False)
|
instance = super().save(commit=False)
|
||||||
|
|
||||||
# Обработка coords_average
|
# coords_average НЕ обрабатываем здесь - это поле управляется только программно
|
||||||
avg_lat = self.cleaned_data.get("average_latitude")
|
# (через _recalculate_average_coords в модели Source)
|
||||||
avg_lng = self.cleaned_data.get("average_longitude")
|
|
||||||
if avg_lat is not None and avg_lng is not None:
|
|
||||||
instance.coords_average = Point(avg_lng, avg_lat, srid=4326)
|
|
||||||
else:
|
|
||||||
instance.coords_average = None
|
|
||||||
|
|
||||||
# Обработка coords_kupsat
|
# Обработка coords_kupsat
|
||||||
kup_lat = self.cleaned_data.get("kupsat_latitude")
|
kup_lat = self.cleaned_data.get("kupsat_latitude")
|
||||||
|
|||||||
@@ -2,29 +2,32 @@
|
|||||||
Переиспользуемый компонент для отображения сообщений Django
|
Переиспользуемый компонент для отображения сообщений Django
|
||||||
Использование:
|
Использование:
|
||||||
{% include 'mainapp/components/_messages.html' %}
|
{% include 'mainapp/components/_messages.html' %}
|
||||||
|
|
||||||
|
Для отключения автоскрытия добавьте extra_tags='persistent':
|
||||||
|
messages.success(request, "Сообщение", extra_tags='persistent')
|
||||||
{% endcomment %}
|
{% endcomment %}
|
||||||
|
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<div class="messages-container">
|
<div class="messages-container">
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
<div class="alert alert-{{ message.tags }} alert-dismissible fade show auto-dismiss" role="alert">
|
<div class="alert alert-{% if 'error' in message.tags %}danger{% elif 'success' in message.tags %}success{% elif 'warning' in message.tags %}warning{% else %}info{% endif %} alert-dismissible fade show {% if 'persistent' not in message.tags %}auto-dismiss{% endif %}" role="alert">
|
||||||
{% if message.tags == 'error' %}
|
{% if 'error' in message.tags %}
|
||||||
<i class="bi bi-exclamation-triangle-fill me-2"></i>
|
<i class="bi bi-exclamation-triangle-fill me-2"></i>
|
||||||
{% elif message.tags == 'success' %}
|
{% elif 'success' in message.tags %}
|
||||||
<i class="bi bi-check-circle-fill me-2"></i>
|
<i class="bi bi-check-circle-fill me-2"></i>
|
||||||
{% elif message.tags == 'warning' %}
|
{% elif 'warning' in message.tags %}
|
||||||
<i class="bi bi-exclamation-circle-fill me-2"></i>
|
<i class="bi bi-exclamation-circle-fill me-2"></i>
|
||||||
{% elif message.tags == 'info' %}
|
{% elif 'info' in message.tags %}
|
||||||
<i class="bi bi-info-circle-fill me-2"></i>
|
<i class="bi bi-info-circle-fill me-2"></i>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{{ message }}
|
{{ message|safe }}
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Автоматическое скрытие уведомлений через 5 секунд
|
// Автоматическое скрытие уведомлений через 5 секунд (кроме persistent)
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
const alerts = document.querySelectorAll('.alert.auto-dismiss');
|
const alerts = document.querySelectorAll('.alert.auto-dismiss');
|
||||||
alerts.forEach(function(alert) {
|
alerts.forEach(function(alert) {
|
||||||
|
|||||||
@@ -54,7 +54,25 @@ class AddTranspondersView(LoginRequiredMixin, FormMessageMixin, FormView):
|
|||||||
try:
|
try:
|
||||||
content = uploaded_file.read()
|
content = uploaded_file.read()
|
||||||
# Передаем текущего пользователя в функцию парсинга
|
# Передаем текущего пользователя в функцию парсинга
|
||||||
parse_transponders_from_xml(BytesIO(content), self.request.user.customuser)
|
stats = parse_transponders_from_xml(BytesIO(content), self.request.user.customuser)
|
||||||
|
|
||||||
|
# Формируем сообщение со статистикой
|
||||||
|
stats_message = (
|
||||||
|
f"<strong>Импорт завершён</strong><br>"
|
||||||
|
f"Спутники: создано {stats['satellites_created']}, "
|
||||||
|
f"обновлено {stats['satellites_updated']}, "
|
||||||
|
f"пропущено {stats['satellites_skipped']}, "
|
||||||
|
f"игнорировано {stats['satellites_ignored']}<br>"
|
||||||
|
f"Транспондеры: создано {stats['transponders_created']}, "
|
||||||
|
f"существующих {stats['transponders_existing']}"
|
||||||
|
)
|
||||||
|
|
||||||
|
if stats['errors']:
|
||||||
|
stats_message += f"<br><strong>Ошибок: {len(stats['errors'])}</strong>"
|
||||||
|
messages.warning(self.request, stats_message, extra_tags='persistent')
|
||||||
|
else:
|
||||||
|
messages.success(self.request, stats_message, extra_tags='persistent')
|
||||||
|
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
messages.error(self.request, f"Ошибка при чтении таблиц: {e}")
|
messages.error(self.request, f"Ошибка при чтении таблиц: {e}")
|
||||||
return redirect("mainapp:add_trans")
|
return redirect("mainapp:add_trans")
|
||||||
|
|||||||
Reference in New Issue
Block a user