Разбил файлик models.py на отдельные файлы моделей
This commit is contained in:
92
dbapp/mainapp/models/geo.py
Normal file
92
dbapp/mainapp/models/geo.py
Normal file
@@ -0,0 +1,92 @@
|
||||
"""
|
||||
Модель геолокационных данных.
|
||||
"""
|
||||
from django.contrib.gis.db import models as gis
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Geo(models.Model):
|
||||
"""
|
||||
Модель геолокационных данных.
|
||||
|
||||
Хранит информацию о местоположении источника сигнала, включая координаты,
|
||||
данные от различных источников (геолокация, кубсат, оперативники) и расстояния между ними.
|
||||
"""
|
||||
|
||||
# Основные поля
|
||||
timestamp = models.DateTimeField(
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name="Время",
|
||||
db_index=True,
|
||||
help_text="Время фиксации геолокации",
|
||||
)
|
||||
location = models.CharField(
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name="Местоположение",
|
||||
help_text="Текстовое описание местоположения",
|
||||
)
|
||||
comment = models.CharField(
|
||||
max_length=255,
|
||||
blank=True,
|
||||
verbose_name="Комментарий",
|
||||
help_text="Дополнительные комментарии",
|
||||
)
|
||||
is_average = models.BooleanField(
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name="Усреднённое",
|
||||
help_text="Является ли координата усредненной",
|
||||
)
|
||||
|
||||
# Координаты
|
||||
coords = gis.PointField(
|
||||
srid=4326,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name="Координата геолокации",
|
||||
help_text="Основные координаты геолокации (WGS84)",
|
||||
)
|
||||
|
||||
# Связи
|
||||
mirrors = models.ManyToManyField(
|
||||
'mainapp.Satellite',
|
||||
related_name="geo_mirrors",
|
||||
verbose_name="Зеркала",
|
||||
blank=True,
|
||||
help_text="Спутники-зеркала, использованные для приема",
|
||||
)
|
||||
objitem = models.OneToOneField(
|
||||
'mainapp.ObjItem',
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name="Объект",
|
||||
related_name="geo_obj",
|
||||
null=True,
|
||||
help_text="Связанный объект",
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
if self.coords:
|
||||
longitude = self.coords.coords[0]
|
||||
latitude = self.coords.coords[1]
|
||||
lon = f"{longitude}E" if longitude > 0 else f"{abs(longitude)}W"
|
||||
lat = f"{latitude}N" if latitude > 0 else f"{abs(latitude)}S"
|
||||
location_str = f", {self.location}" if self.location else ""
|
||||
return f"{lat} {lon}{location_str}"
|
||||
return f"Гео #{self.pk}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Гео"
|
||||
verbose_name_plural = "Гео"
|
||||
ordering = ["-timestamp"]
|
||||
indexes = [
|
||||
models.Index(fields=["-timestamp"]),
|
||||
models.Index(fields=["location"]),
|
||||
]
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["timestamp", "coords"], name="unique_geo_combination"
|
||||
)
|
||||
]
|
||||
Reference in New Issue
Block a user