Начал редактирование парсинга спутников
This commit is contained in:
@@ -573,12 +573,13 @@ class SatelliteAdmin(BaseAdmin):
|
|||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"norad",
|
"norad",
|
||||||
|
"international_code",
|
||||||
"undersat_point",
|
"undersat_point",
|
||||||
"launch_date",
|
"launch_date",
|
||||||
"created_at",
|
"created_at",
|
||||||
"updated_at",
|
"updated_at",
|
||||||
)
|
)
|
||||||
search_fields = ("name", "norad")
|
search_fields = ("name", "norad", "international_code")
|
||||||
ordering = ("name",)
|
ordering = ("name",)
|
||||||
filter_horizontal = ("band",)
|
filter_horizontal = ("band",)
|
||||||
autocomplete_fields = ("band",)
|
autocomplete_fields = ("band",)
|
||||||
|
|||||||
@@ -816,6 +816,7 @@ class SatelliteForm(forms.ModelForm):
|
|||||||
fields = [
|
fields = [
|
||||||
'name',
|
'name',
|
||||||
'norad',
|
'norad',
|
||||||
|
'international_code',
|
||||||
'band',
|
'band',
|
||||||
'undersat_point',
|
'undersat_point',
|
||||||
'url',
|
'url',
|
||||||
@@ -832,6 +833,10 @@ class SatelliteForm(forms.ModelForm):
|
|||||||
'class': 'form-control',
|
'class': 'form-control',
|
||||||
'placeholder': 'Введите NORAD ID'
|
'placeholder': 'Введите NORAD ID'
|
||||||
}),
|
}),
|
||||||
|
'international_code': forms.TextInput(attrs={
|
||||||
|
'class': 'form-control',
|
||||||
|
'placeholder': 'Например, 2011-074A'
|
||||||
|
}),
|
||||||
'band': forms.SelectMultiple(attrs={
|
'band': forms.SelectMultiple(attrs={
|
||||||
'class': 'form-select',
|
'class': 'form-select',
|
||||||
'size': '5'
|
'size': '5'
|
||||||
@@ -858,6 +863,7 @@ class SatelliteForm(forms.ModelForm):
|
|||||||
labels = {
|
labels = {
|
||||||
'name': 'Название спутника',
|
'name': 'Название спутника',
|
||||||
'norad': 'NORAD ID',
|
'norad': 'NORAD ID',
|
||||||
|
'international_code': 'Международный код',
|
||||||
'band': 'Диапазоны работы',
|
'band': 'Диапазоны работы',
|
||||||
'undersat_point': 'Подспутниковая точка (градусы)',
|
'undersat_point': 'Подспутниковая точка (градусы)',
|
||||||
'url': 'Ссылка на источник',
|
'url': 'Ссылка на источник',
|
||||||
@@ -867,6 +873,7 @@ class SatelliteForm(forms.ModelForm):
|
|||||||
help_texts = {
|
help_texts = {
|
||||||
'name': 'Уникальное название спутника',
|
'name': 'Уникальное название спутника',
|
||||||
'norad': 'Идентификатор NORAD для отслеживания спутника',
|
'norad': 'Идентификатор NORAD для отслеживания спутника',
|
||||||
|
'international_code': 'Международный идентификатор спутника (например, 2011-074A)',
|
||||||
'band': 'Выберите диапазоны работы спутника (удерживайте Ctrl для множественного выбора)',
|
'band': 'Выберите диапазоны работы спутника (удерживайте Ctrl для множественного выбора)',
|
||||||
'undersat_point': 'Восточное полушарие с +, западное с -',
|
'undersat_point': 'Восточное полушарие с +, западное с -',
|
||||||
'url': 'Ссылка на сайт, где можно проверить информацию',
|
'url': 'Ссылка на сайт, где можно проверить информацию',
|
||||||
|
|||||||
@@ -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='Международный код'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -350,6 +350,13 @@ class Satellite(models.Model):
|
|||||||
verbose_name="NORAD ID",
|
verbose_name="NORAD ID",
|
||||||
help_text="Идентификатор NORAD для отслеживания спутника",
|
help_text="Идентификатор NORAD для отслеживания спутника",
|
||||||
)
|
)
|
||||||
|
international_code = models.CharField(
|
||||||
|
max_length=50,
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
verbose_name="Международный код",
|
||||||
|
help_text="Международный идентификатор спутника (например, 2011-074A)",
|
||||||
|
)
|
||||||
band = models.ManyToManyField(
|
band = models.ManyToManyField(
|
||||||
Band,
|
Band,
|
||||||
related_name="bands",
|
related_name="bands",
|
||||||
|
|||||||
@@ -107,17 +107,17 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="{{ form.band.id_for_label }}" class="form-label">
|
<label for="{{ form.international_code.id_for_label }}" class="form-label">
|
||||||
{{ form.band.label }}
|
{{ form.international_code.label }}
|
||||||
</label>
|
</label>
|
||||||
{{ form.band }}
|
{{ form.international_code }}
|
||||||
{% if form.band.errors %}
|
{% if form.international_code.errors %}
|
||||||
<div class="invalid-feedback d-block">
|
<div class="invalid-feedback d-block">
|
||||||
{{ form.band.errors.0 }}
|
{{ form.international_code.errors.0 }}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if form.band.help_text %}
|
{% if form.international_code.help_text %}
|
||||||
<div class="form-text">{{ form.band.help_text }}</div>
|
<div class="form-text">{{ form.international_code.help_text }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -140,6 +140,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</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="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
|
|||||||
@@ -200,6 +200,16 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</th>
|
</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;">Диапазоны</th>
|
||||||
<th scope="col" style="min-width: 120px;">
|
<th scope="col" style="min-width: 120px;">
|
||||||
<a href="javascript:void(0)" onclick="updateSort('undersat_point')" class="text-white text-decoration-none">
|
<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 class="text-center">{{ satellite.id }}</td>
|
||||||
<td>{{ satellite.name }}</td>
|
<td>{{ satellite.name }}</td>
|
||||||
<td>{{ satellite.norad }}</td>
|
<td>{{ satellite.norad }}</td>
|
||||||
|
<td>{{ satellite.international_code|default:"-" }}</td>
|
||||||
<td>{{ satellite.bands }}</td>
|
<td>{{ satellite.bands }}</td>
|
||||||
<td>{{ satellite.undersat_point }}</td>
|
<td>{{ satellite.undersat_point }}</td>
|
||||||
<td>{{ satellite.launch_date }}</td>
|
<td>{{ satellite.launch_date }}</td>
|
||||||
@@ -296,7 +307,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="12" class="text-center text-muted">Нет данных для отображения</td>
|
<td colspan="13" class="text-center text-muted">Нет данных для отображения</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -139,6 +139,8 @@ class SatelliteListView(LoginRequiredMixin, View):
|
|||||||
"-name": "-name",
|
"-name": "-name",
|
||||||
"norad": "norad",
|
"norad": "norad",
|
||||||
"-norad": "-norad",
|
"-norad": "-norad",
|
||||||
|
"international_code": "international_code",
|
||||||
|
"-international_code": "-international_code",
|
||||||
"undersat_point": "undersat_point",
|
"undersat_point": "undersat_point",
|
||||||
"-undersat_point": "-undersat_point",
|
"-undersat_point": "-undersat_point",
|
||||||
"launch_date": "launch_date",
|
"launch_date": "launch_date",
|
||||||
@@ -168,6 +170,7 @@ class SatelliteListView(LoginRequiredMixin, View):
|
|||||||
'id': satellite.id,
|
'id': satellite.id,
|
||||||
'name': satellite.name or "-",
|
'name': satellite.name or "-",
|
||||||
'norad': satellite.norad if satellite.norad else "-",
|
'norad': satellite.norad if satellite.norad else "-",
|
||||||
|
'international_code': satellite.international_code or "-",
|
||||||
'bands': ", ".join(band_names) if band_names else "-",
|
'bands': ", ".join(band_names) if band_names else "-",
|
||||||
'undersat_point': f"{satellite.undersat_point:.2f}" if satellite.undersat_point is not None 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 "-",
|
'launch_date': satellite.launch_date.strftime("%d.%m.%Y") if satellite.launch_date else "-",
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
"""Django's command-line utility for administrative tasks."""
|
"""Django's command-line utility for administrative tasks."""
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""Run administrative tasks."""
|
"""Run administrative tasks."""
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbapp.settings')
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbapp.settings')
|
||||||
try:
|
try:
|
||||||
from django.core.management import execute_from_command_line
|
from django.core.management import execute_from_command_line
|
||||||
except ImportError as exc:
|
except ImportError as exc:
|
||||||
raise ImportError(
|
raise ImportError(
|
||||||
"Couldn't import Django. Are you sure it's installed and "
|
"Couldn't import Django. Are you sure it's installed and "
|
||||||
"available on your PYTHONPATH environment variable? Did you "
|
"available on your PYTHONPATH environment variable? Did you "
|
||||||
"forget to activate a virtual environment?"
|
"forget to activate a virtual environment?"
|
||||||
) from exc
|
) from exc
|
||||||
execute_from_command_line(sys.argv)
|
execute_from_command_line(sys.argv)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|||||||
Reference in New Issue
Block a user