Переосмыслил отметки по ВЧ загрузке. Улучшил статистику

This commit is contained in:
2025-12-10 17:43:38 +03:00
parent 4949a03e68
commit 41e8dc30fd
16 changed files with 1834 additions and 980 deletions

View File

@@ -106,17 +106,18 @@ class ObjectOwnership(models.Model):
class ObjectMark(models.Model):
"""
Модель отметки о наличии объекта.
Модель отметки о наличии сигнала.
Используется для фиксации моментов времени когда объект был обнаружен или отсутствовал.
Используется для фиксации моментов времени когда сигнал был обнаружен или отсутствовал.
Привязывается к записям технического анализа (TechAnalyze).
"""
# Основные поля
mark = models.BooleanField(
null=True,
blank=True,
verbose_name="Наличие объекта",
help_text="True - объект обнаружен, False - объект отсутствует",
verbose_name="Наличие сигнала",
help_text="True - сигнал обнаружен, False - сигнал отсутствует",
)
timestamp = models.DateTimeField(
auto_now_add=True,
@@ -124,12 +125,12 @@ class ObjectMark(models.Model):
db_index=True,
help_text="Время фиксации отметки",
)
source = models.ForeignKey(
'Source',
tech_analyze = models.ForeignKey(
'TechAnalyze',
on_delete=models.CASCADE,
related_name="marks",
verbose_name="Источник",
help_text="Связанный источник",
verbose_name="Тех. анализ",
help_text="Связанный технический анализ",
)
created_by = models.ForeignKey(
CustomUser,
@@ -160,13 +161,18 @@ class ObjectMark(models.Model):
def __str__(self):
if self.timestamp:
timestamp = self.timestamp.strftime("%d.%m.%Y %H:%M")
return f"+ {timestamp}" if self.mark else f"- {timestamp}"
tech_name = self.tech_analyze.name if self.tech_analyze else "?"
mark_str = "+" if self.mark else "-"
return f"{tech_name}: {mark_str} {timestamp}"
return "Отметка без времени"
class Meta:
verbose_name = "Отметка источника"
verbose_name_plural = "Отметки источников"
verbose_name = "Отметка сигнала"
verbose_name_plural = "Отметки сигналов"
ordering = ["-timestamp"]
indexes = [
models.Index(fields=["tech_analyze", "-timestamp"]),
]
# Для обратной совместимости с SigmaParameter
@@ -737,16 +743,6 @@ class Source(models.Model):
if last_objitem:
self.confirm_at = last_objitem.created_at
def update_last_signal_at(self):
"""
Обновляет дату last_signal_at на дату последней отметки о наличии сигнала (mark=True).
"""
last_signal_mark = self.marks.filter(mark=True).order_by('-timestamp').first()
if last_signal_mark:
self.last_signal_at = last_signal_mark.timestamp
else:
self.last_signal_at = None
def save(self, *args, **kwargs):
"""
Переопределенный метод save для автоматического обновления coords_average