Процесс переделки

This commit is contained in:
2025-11-12 17:53:25 +03:00
parent 73ce06deec
commit 7126974aed
21 changed files with 1927 additions and 1922 deletions

View File

@@ -201,6 +201,32 @@ class Standard(models.Model):
verbose_name_plural = "Стандарты"
ordering = ["name"]
class Band(models.Model):
name = models.CharField(
max_length=50,
unique=True,
verbose_name="Название",
help_text="Название диапазона",
)
border_start = models.FloatField(
blank=True,
null=True,
verbose_name="Нижняя граница диапазона, МГц"
)
border_end = models.FloatField(
blank=True,
null=True,
verbose_name="Верхняя граница диапазона, МГц"
)
def __str__(self):
return self.name
class Meta:
verbose_name = "Диапазон"
verbose_name_plural = "Диапазоны"
ordering = ["name"]
class Satellite(models.Model):
"""
@@ -223,6 +249,66 @@ class Satellite(models.Model):
verbose_name="NORAD ID",
help_text="Идентификатор NORAD для отслеживания спутника",
)
band = models.ManyToManyField(
Band,
related_name="bands",
verbose_name="Диапазоны",
blank=True,
help_text="Диапазоны работы спутника",
)
undersat_point = models.FloatField(
blank=True,
null=True,
verbose_name="Подспутниковая точка, градусы",
help_text="Подспутниковая точка в градусах. Восточное полушарие с +, западное с -",
)
url = models.URLField(
blank=True,
null=True,
verbose_name="Ссылка на источник",
help_text="Ссылка на сайт, где можно проверить информацию",
)
comment = models.TextField(
blank=True,
null=True,
verbose_name="Комментарий",
help_text="Любой возможный комменатрий",
)
launch_date = models.DateField(
blank=True,
null=True,
verbose_name="Дата запуска",
help_text="Дата запуска спутника",
)
created_at = models.DateTimeField(
auto_now_add=True,
verbose_name="Дата создания",
help_text="Дата и время создания записи",
)
created_by = models.ForeignKey(
CustomUser,
on_delete=models.SET_NULL,
related_name="satellite_created",
null=True,
blank=True,
verbose_name="Создан пользователем",
help_text="Пользователь, создавший запись",
)
updated_at = models.DateTimeField(
auto_now=True,
verbose_name="Дата последнего изменения",
help_text="Дата и время последнего изменения",
)
updated_by = models.ForeignKey(
CustomUser,
on_delete=models.SET_NULL,
related_name="satellite_updated",
null=True,
blank=True,
verbose_name="Изменен пользователем",
help_text="Пользователь, последним изменивший запись",
)
def __str__(self):
return self.name
@@ -283,11 +369,73 @@ class ObjItemManager(models.Manager):
return self.get_queryset().by_user(user)
class Source(models.Model):
"""
Модель источника сигнала.
"""
coords_kupsat = gis.PointField(
srid=4326,
null=True,
blank=True,
verbose_name="Координаты Кубсата",
help_text="Координаты, полученные от кубсата (WGS84)",
)
coords_valid = gis.PointField(
srid=4326,
null=True,
blank=True,
verbose_name="Координаты оперативников",
help_text="Координаты, предоставленные оперативным отделом (WGS84)",
)
coords_reference = gis.PointField(
srid=4326,
null=True,
blank=True,
verbose_name="Координаты справочные",
help_text="Координаты, ещё кем-то проверенные (WGS84)",
)
created_at = models.DateTimeField(
auto_now_add=True,
verbose_name="Дата создания",
help_text="Дата и время создания записи",
)
created_by = models.ForeignKey(
CustomUser,
on_delete=models.SET_NULL,
related_name="source_created",
null=True,
blank=True,
verbose_name="Создан пользователем",
help_text="Пользователь, создавший запись",
)
updated_at = models.DateTimeField(
auto_now=True,
verbose_name="Дата последнего изменения",
help_text="Дата и время последнего изменения",
)
updated_by = models.ForeignKey(
CustomUser,
on_delete=models.SET_NULL,
related_name="source_updated",
null=True,
blank=True,
verbose_name="Изменен пользователем",
help_text="Пользователь, последним изменивший запись",
)
class Meta:
verbose_name = "Источник"
verbose_name_plural = "Источники"
class ObjItem(models.Model):
"""
Модель объекта (источника сигнала).
Модель точки ГЛ.
Центральная модель, объединяющая информацию о ВЧ параметрах, геолокации и типе источника.
Центральная модель, объединяющая информацию о ВЧ параметрах, геолокации.
"""
# Основные поля
@@ -299,6 +447,22 @@ class ObjItem(models.Model):
db_index=True,
help_text="Название объекта/источника сигнала",
)
source = models.ForeignKey(
Source,
on_delete=models.CASCADE,
null=True,
verbose_name="ИРИ",
related_name="source",
)
transponder = models.ForeignKey(
"mapsapp.Transponders",
on_delete=models.SET_NULL,
related_name="transponder",
null=True,
blank=True,
verbose_name="Транспондер",
help_text="Транспондер, с помощью которого была получена точка",
)
# Метаданные
created_at = models.DateTimeField(
@@ -679,46 +843,32 @@ class Geo(models.Model):
verbose_name="Координата геолокации",
help_text="Основные координаты геолокации (WGS84)",
)
coords_kupsat = gis.PointField(
srid=4326,
null=True,
blank=True,
verbose_name="Координаты Кубсата",
help_text="Координаты, полученные от кубсата (WGS84)",
)
coords_valid = gis.PointField(
srid=4326,
null=True,
blank=True,
verbose_name="Координаты оперативников",
help_text="Координаты, предоставленные оперативным отделом (WGS84)",
)
# Вычисляемые поля - расстояния
distance_coords_kup = models.GeneratedField(
expression=functions.Distance("coords", "coords_kupsat") / 1000,
output_field=models.FloatField(),
db_persist=True,
null=True,
blank=True,
verbose_name="Расстояние между кубсатом и гео, км",
)
distance_coords_valid = models.GeneratedField(
expression=functions.Distance("coords", "coords_valid") / 1000,
output_field=models.FloatField(),
db_persist=True,
null=True,
blank=True,
verbose_name="Расстояние между гео и оперативным отделом, км",
)
distance_kup_valid = models.GeneratedField(
expression=functions.Distance("coords_valid", "coords_kupsat") / 1000,
output_field=models.FloatField(),
db_persist=True,
null=True,
blank=True,
verbose_name="Расстояние между кубсатом и оперативным отделом, км",
)
# distance_coords_kup = models.GeneratedField(
# expression=functions.Distance("coords", "coords_kupsat") / 1000,
# output_field=models.FloatField(),
# db_persist=True,
# null=True,
# blank=True,
# verbose_name="Расстояние между кубсатом и гео, км",
# )
# distance_coords_valid = models.GeneratedField(
# expression=functions.Distance("coords", "coords_valid") / 1000,
# output_field=models.FloatField(),
# db_persist=True,
# null=True,
# blank=True,
# verbose_name="Расстояние между гео и оперативным отделом, км",
# )
# distance_kup_valid = models.GeneratedField(
# expression=functions.Distance("coords_valid", "coords_kupsat") / 1000,
# output_field=models.FloatField(),
# db_persist=True,
# null=True,
# blank=True,
# verbose_name="Расстояние между кубсатом и оперативным отделом, км",
# )
# Связи
mirrors = models.ManyToManyField(