Начал редактирование парсинга спутников

This commit is contained in:
2025-11-26 23:57:21 +03:00
parent d832171325
commit bd39717e86
8 changed files with 97 additions and 31 deletions

View File

@@ -573,12 +573,13 @@ class SatelliteAdmin(BaseAdmin):
list_display = (
"name",
"norad",
"international_code",
"undersat_point",
"launch_date",
"created_at",
"updated_at",
)
search_fields = ("name", "norad")
search_fields = ("name", "norad", "international_code")
ordering = ("name",)
filter_horizontal = ("band",)
autocomplete_fields = ("band",)

View File

@@ -816,6 +816,7 @@ class SatelliteForm(forms.ModelForm):
fields = [
'name',
'norad',
'international_code',
'band',
'undersat_point',
'url',
@@ -832,6 +833,10 @@ class SatelliteForm(forms.ModelForm):
'class': 'form-control',
'placeholder': 'Введите NORAD ID'
}),
'international_code': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'Например, 2011-074A'
}),
'band': forms.SelectMultiple(attrs={
'class': 'form-select',
'size': '5'
@@ -858,6 +863,7 @@ class SatelliteForm(forms.ModelForm):
labels = {
'name': 'Название спутника',
'norad': 'NORAD ID',
'international_code': 'Международный код',
'band': 'Диапазоны работы',
'undersat_point': 'Подспутниковая точка (градусы)',
'url': 'Ссылка на источник',
@@ -867,6 +873,7 @@ class SatelliteForm(forms.ModelForm):
help_texts = {
'name': 'Уникальное название спутника',
'norad': 'Идентификатор NORAD для отслеживания спутника',
'international_code': 'Международный идентификатор спутника (например, 2011-074A)',
'band': 'Выберите диапазоны работы спутника (удерживайте Ctrl для множественного выбора)',
'undersat_point': 'Восточное полушарие с +, западное с -',
'url': 'Ссылка на сайт, где можно проверить информацию',

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.7 on 2025-11-26 20:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('mainapp', '0014_source_note'),
]
operations = [
migrations.AddField(
model_name='satellite',
name='international_code',
field=models.CharField(blank=True, help_text='Международный идентификатор спутника (например, 2011-074A)', max_length=20, null=True, verbose_name='Международный код'),
),
]

View File

@@ -350,6 +350,13 @@ class Satellite(models.Model):
verbose_name="NORAD ID",
help_text="Идентификатор NORAD для отслеживания спутника",
)
international_code = models.CharField(
max_length=50,
blank=True,
null=True,
verbose_name="Международный код",
help_text="Международный идентификатор спутника (например, 2011-074A)",
)
band = models.ManyToManyField(
Band,
related_name="bands",

View File

@@ -107,17 +107,17 @@
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="{{ form.band.id_for_label }}" class="form-label">
{{ form.band.label }}
<label for="{{ form.international_code.id_for_label }}" class="form-label">
{{ form.international_code.label }}
</label>
{{ form.band }}
{% if form.band.errors %}
{{ form.international_code }}
{% if form.international_code.errors %}
<div class="invalid-feedback d-block">
{{ form.band.errors.0 }}
{{ form.international_code.errors.0 }}
</div>
{% endif %}
{% if form.band.help_text %}
<div class="form-text">{{ form.band.help_text }}</div>
{% if form.international_code.help_text %}
<div class="form-text">{{ form.international_code.help_text }}</div>
{% endif %}
</div>
</div>
@@ -140,6 +140,25 @@
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="mb-3">
<label for="{{ form.band.id_for_label }}" class="form-label">
{{ form.band.label }}
</label>
{{ form.band }}
{% if form.band.errors %}
<div class="invalid-feedback d-block">
{{ form.band.errors.0 }}
</div>
{% endif %}
{% if form.band.help_text %}
<div class="form-text">{{ form.band.help_text }}</div>
{% endif %}
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">

View File

@@ -200,6 +200,16 @@
{% endif %}
</a>
</th>
<th scope="col" style="min-width: 120px;">
<a href="javascript:void(0)" onclick="updateSort('international_code')" class="text-white text-decoration-none">
Международный код
{% if sort == 'international_code' %}
<i class="bi bi-arrow-up"></i>
{% elif sort == '-international_code' %}
<i class="bi bi-arrow-down"></i>
{% endif %}
</a>
</th>
<th scope="col" style="min-width: 120px;">Диапазоны</th>
<th scope="col" style="min-width: 120px;">
<a href="javascript:void(0)" onclick="updateSort('undersat_point')" class="text-white text-decoration-none">
@@ -265,6 +275,7 @@
<td class="text-center">{{ satellite.id }}</td>
<td>{{ satellite.name }}</td>
<td>{{ satellite.norad }}</td>
<td>{{ satellite.international_code|default:"-" }}</td>
<td>{{ satellite.bands }}</td>
<td>{{ satellite.undersat_point }}</td>
<td>{{ satellite.launch_date }}</td>
@@ -296,7 +307,7 @@
</tr>
{% empty %}
<tr>
<td colspan="12" class="text-center text-muted">Нет данных для отображения</td>
<td colspan="13" class="text-center text-muted">Нет данных для отображения</td>
</tr>
{% endfor %}
</tbody>

View File

@@ -139,6 +139,8 @@ class SatelliteListView(LoginRequiredMixin, View):
"-name": "-name",
"norad": "norad",
"-norad": "-norad",
"international_code": "international_code",
"-international_code": "-international_code",
"undersat_point": "undersat_point",
"-undersat_point": "-undersat_point",
"launch_date": "launch_date",
@@ -168,6 +170,7 @@ class SatelliteListView(LoginRequiredMixin, View):
'id': satellite.id,
'name': satellite.name or "-",
'norad': satellite.norad if satellite.norad else "-",
'international_code': satellite.international_code or "-",
'bands': ", ".join(band_names) if band_names else "-",
'undersat_point': f"{satellite.undersat_point:.2f}" if satellite.undersat_point is not None else "-",
'launch_date': satellite.launch_date.strftime("%d.%m.%Y") if satellite.launch_date else "-",

View File

@@ -1,22 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbapp.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbapp.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()