rework main models
This commit is contained in:
@@ -2,6 +2,7 @@ from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.gis.db import models as gis
|
||||
from django.contrib.gis.db.models import functions
|
||||
from django.db.models import F, ExpressionWrapper
|
||||
|
||||
def get_default_polarization():
|
||||
obj, created = Polarization.objects.get_or_create(
|
||||
@@ -96,7 +97,7 @@ class Standard(models.Model):
|
||||
|
||||
|
||||
class Satellite(models.Model):
|
||||
name = models.CharField(max_length=30, unique=True, verbose_name="Имя спутника", db_index=True)
|
||||
name = models.CharField(max_length=100, unique=True, verbose_name="Имя спутника", db_index=True)
|
||||
norad = models.IntegerField(blank=True, null=True, verbose_name="NORAD ID")
|
||||
|
||||
def __str__(self):
|
||||
@@ -107,6 +108,40 @@ class Satellite(models.Model):
|
||||
verbose_name_plural = "Спутники"
|
||||
|
||||
|
||||
class ObjItem(models.Model):
|
||||
name = models.CharField(null=True, blank=True, max_length=100, verbose_name="Имя объекта", db_index=True)
|
||||
# id_satellite = models.ForeignKey(Satellite, on_delete=models.PROTECT, related_name="objitems", verbose_name="Спутник")
|
||||
# id_vch_load = models.ForeignKey(Parameter, on_delete=models.CASCADE, related_name="objitems", verbose_name="ВЧ загрузка")
|
||||
# id_geo = models.ForeignKey(Geo, on_delete=models.CASCADE, related_name="objitems", verbose_name="Геоданные")
|
||||
id_user_add = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, related_name="objitems", verbose_name="Пользователь", null=True, blank=True)
|
||||
# id_source_type = models.ForeignKey(SourceType, on_delete=models.SET_NULL, related_name="objitems", verbose_name='Тип источника', null=True, blank=True)
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return f"Объект {self.name}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Объект"
|
||||
verbose_name_plural = "Объекты"
|
||||
# constraints = [
|
||||
# models.UniqueConstraint(
|
||||
# fields=['id_vch_load', 'id_geo'],
|
||||
# name='unique_objitem_combination'
|
||||
# )
|
||||
# ]
|
||||
|
||||
class SourceType(models.Model):
|
||||
name = models.CharField(max_length=50, unique=True, verbose_name="Тип источника")
|
||||
objitem = models.OneToOneField(ObjItem, on_delete=models.SET_NULL, verbose_name="Гео", related_name="objitems", null=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Тип источника"
|
||||
verbose_name_plural = 'Типы источников'
|
||||
|
||||
|
||||
class Parameter(models.Model):
|
||||
id_satellite = models.ForeignKey(Satellite, on_delete=models.PROTECT, related_name="parameters", verbose_name="Спутник", null=True)
|
||||
polarization = models.ForeignKey(
|
||||
@@ -123,6 +158,7 @@ class Parameter(models.Model):
|
||||
Standard, default=get_default_standard, on_delete=models.SET_DEFAULT, related_name="standards", null=True, blank=True, verbose_name="Стандарт"
|
||||
)
|
||||
id_user_add = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, related_name="parameter_added", verbose_name="Пользователь", null=True, blank=True)
|
||||
objitem = models.ForeignKey(ObjItem, on_delete=models.SET_NULL, related_name="objitems", verbose_name="Источник",null=True, blank=True)
|
||||
# id_sigma_parameter = models.ManyToManyField(SigmaParameter, on_delete=models.SET_NULL, related_name="sigma_parameter", verbose_name="ВЧ с sigma", null=True, blank=True)
|
||||
# id_sigma_parameter = models.ManyToManyField(SigmaParameter, verbose_name="ВЧ с sigma", null=True, blank=True)
|
||||
|
||||
@@ -151,12 +187,35 @@ class Parameter(models.Model):
|
||||
|
||||
|
||||
class SigmaParameter(models.Model):
|
||||
TRANSFERS = [
|
||||
(-1.0, "-"),
|
||||
(9750.0, "9750 МГц"),
|
||||
(10750.0, "10750 МГц")
|
||||
]
|
||||
|
||||
id_satellite = models.ForeignKey(Satellite, on_delete=models.PROTECT, related_name="sigmapar_sat", verbose_name="Спутник")
|
||||
transfer = models.FloatField(
|
||||
choices=TRANSFERS,
|
||||
default=-1.0,
|
||||
verbose_name="Перенос по частоте"
|
||||
)
|
||||
status = models.CharField(max_length=20, blank=True, null=True, verbose_name="Статус")
|
||||
frequency = models.FloatField(default=0, null=True, blank=True, verbose_name="Частота, МГц", db_index=True)
|
||||
transfer_frequency = models.GeneratedField(
|
||||
expression=ExpressionWrapper(
|
||||
F('frequency') + F('transfer'),
|
||||
output_field=models.FloatField()
|
||||
),
|
||||
output_field=models.FloatField(),
|
||||
db_persist=True,
|
||||
null=True, blank=True, verbose_name="Частота в Ku, МГц"
|
||||
)
|
||||
freq_range = models.FloatField(default=0, null=True, blank=True, verbose_name="Полоса частот, МГц")
|
||||
power = models.FloatField(default=0, null=True, blank=True, verbose_name="Мощность, дБм")
|
||||
bod_velocity = models.FloatField(default=0, null=True, blank=True, verbose_name="Символьная скорость, БОД")
|
||||
polarization = models.ForeignKey(
|
||||
Polarization, default=get_default_polarization, on_delete=models.SET_DEFAULT, related_name="polarizations_sigma", null=True, blank=True, verbose_name="Поляризация"
|
||||
)
|
||||
modulation = models.ForeignKey(
|
||||
Modulation, default=get_default_modulation, on_delete=models.SET_DEFAULT, related_name="modulations_sigma", null=True, blank=True, verbose_name="Модуляция"
|
||||
)
|
||||
@@ -213,6 +272,7 @@ class Geo(models.Model):
|
||||
db_persist=True,
|
||||
null=True, blank=True, verbose_name="Расстояние между купсатом и оперативным отделом, км"
|
||||
)
|
||||
objitem = models.OneToOneField(ObjItem, on_delete=models.SET_NULL, verbose_name="Гео", related_name="objitems", null=True)
|
||||
|
||||
def __str__(self):
|
||||
longitude = self.coords.coords[0]
|
||||
@@ -234,23 +294,3 @@ class Geo(models.Model):
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
class ObjItem(models.Model):
|
||||
name = models.CharField(null=True, blank=True, max_length=100, verbose_name="Имя объекта", db_index=True)
|
||||
# id_satellite = models.ForeignKey(Satellite, on_delete=models.PROTECT, related_name="objitems", verbose_name="Спутник")
|
||||
id_vch_load = models.ForeignKey(Parameter, on_delete=models.CASCADE, related_name="objitems", verbose_name="ВЧ загрузка")
|
||||
id_geo = models.ForeignKey(Geo, on_delete=models.CASCADE, related_name="objitems", verbose_name="Геоданные")
|
||||
id_user_add = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, related_name="objitems", verbose_name="Пользователь", null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"Объект {self.name}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Объект"
|
||||
verbose_name_plural = "Объекты"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=['id_vch_load', 'id_geo'],
|
||||
name='unique_objitem_combination'
|
||||
)
|
||||
]
|
||||
Reference in New Issue
Block a user