Добавил транспондеры к ObjItem шаблону
This commit is contained in:
@@ -9,6 +9,7 @@ from .models import (
|
||||
Parameter,
|
||||
Polarization,
|
||||
Satellite,
|
||||
Source,
|
||||
Standard,
|
||||
)
|
||||
from .widgets import CheckboxSelectMultipleWidget
|
||||
@@ -305,8 +306,8 @@ class GeoForm(forms.ModelForm):
|
||||
"is_average": forms.CheckboxInput(attrs={"class": "form-check-input"}),
|
||||
"mirrors": CheckboxSelectMultipleWidget(
|
||||
attrs={
|
||||
'id': 'id_geo-mirrors',
|
||||
'placeholder': 'Выберите спутники...',
|
||||
"id": "id_geo-mirrors",
|
||||
"placeholder": "Выберите спутники...",
|
||||
}
|
||||
),
|
||||
}
|
||||
@@ -372,3 +373,160 @@ class ObjItemForm(forms.ModelForm):
|
||||
)
|
||||
|
||||
return name
|
||||
|
||||
|
||||
class SourceForm(forms.ModelForm):
|
||||
"""Form for editing Source model with 4 coordinate fields."""
|
||||
|
||||
# Координаты ГЛ (coords_average)
|
||||
average_latitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={"class": "form-control", "step": "0.000001", "placeholder": "Широта"}
|
||||
),
|
||||
label="Широта ГЛ",
|
||||
)
|
||||
average_longitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"step": "0.000001",
|
||||
"placeholder": "Долгота",
|
||||
}
|
||||
),
|
||||
label="Долгота ГЛ",
|
||||
)
|
||||
|
||||
# Координаты Кубсата (coords_kupsat)
|
||||
kupsat_latitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={"class": "form-control", "step": "0.000001", "placeholder": "Широта"}
|
||||
),
|
||||
label="Широта Кубсата",
|
||||
)
|
||||
kupsat_longitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"step": "0.000001",
|
||||
"placeholder": "Долгота",
|
||||
}
|
||||
),
|
||||
label="Долгота Кубсата",
|
||||
)
|
||||
|
||||
# Координаты оперативников (coords_valid)
|
||||
valid_latitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={"class": "form-control", "step": "0.000001", "placeholder": "Широта"}
|
||||
),
|
||||
label="Широта оперативников",
|
||||
)
|
||||
valid_longitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"step": "0.000001",
|
||||
"placeholder": "Долгота",
|
||||
}
|
||||
),
|
||||
label="Долгота оперативников",
|
||||
)
|
||||
|
||||
# Координаты справочные (coords_reference)
|
||||
reference_latitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={"class": "form-control", "step": "0.000001", "placeholder": "Широта"}
|
||||
),
|
||||
label="Широта справочные",
|
||||
)
|
||||
reference_longitude = forms.FloatField(
|
||||
required=False,
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"step": "0.000001",
|
||||
"placeholder": "Долгота",
|
||||
}
|
||||
),
|
||||
label="Долгота справочные",
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Source
|
||||
fields = [] # Все поля обрабатываются вручную
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Заполняем поля координат из instance
|
||||
if self.instance and self.instance.pk:
|
||||
if self.instance.coords_average:
|
||||
self.fields[
|
||||
"average_longitude"
|
||||
].initial = self.instance.coords_average.x
|
||||
self.fields["average_latitude"].initial = self.instance.coords_average.y
|
||||
|
||||
if self.instance.coords_kupsat:
|
||||
self.fields["kupsat_longitude"].initial = self.instance.coords_kupsat.x
|
||||
self.fields["kupsat_latitude"].initial = self.instance.coords_kupsat.y
|
||||
|
||||
if self.instance.coords_valid:
|
||||
self.fields["valid_longitude"].initial = self.instance.coords_valid.x
|
||||
self.fields["valid_latitude"].initial = self.instance.coords_valid.y
|
||||
|
||||
if self.instance.coords_reference:
|
||||
self.fields[
|
||||
"reference_longitude"
|
||||
].initial = self.instance.coords_reference.x
|
||||
self.fields[
|
||||
"reference_latitude"
|
||||
].initial = self.instance.coords_reference.y
|
||||
|
||||
def save(self, commit=True):
|
||||
from django.contrib.gis.geos import Point
|
||||
|
||||
instance = super().save(commit=False)
|
||||
|
||||
# Обработка coords_average
|
||||
avg_lat = self.cleaned_data.get("average_latitude")
|
||||
avg_lng = self.cleaned_data.get("average_longitude")
|
||||
if avg_lat is not None and avg_lng is not None:
|
||||
instance.coords_average = Point(avg_lng, avg_lat, srid=4326)
|
||||
else:
|
||||
instance.coords_average = None
|
||||
|
||||
# Обработка coords_kupsat
|
||||
kup_lat = self.cleaned_data.get("kupsat_latitude")
|
||||
kup_lng = self.cleaned_data.get("kupsat_longitude")
|
||||
if kup_lat is not None and kup_lng is not None:
|
||||
instance.coords_kupsat = Point(kup_lng, kup_lat, srid=4326)
|
||||
else:
|
||||
instance.coords_kupsat = None
|
||||
|
||||
# Обработка coords_valid
|
||||
val_lat = self.cleaned_data.get("valid_latitude")
|
||||
val_lng = self.cleaned_data.get("valid_longitude")
|
||||
if val_lat is not None and val_lng is not None:
|
||||
instance.coords_valid = Point(val_lng, val_lat, srid=4326)
|
||||
else:
|
||||
instance.coords_valid = None
|
||||
|
||||
# Обработка coords_reference
|
||||
ref_lat = self.cleaned_data.get("reference_latitude")
|
||||
ref_lng = self.cleaned_data.get("reference_longitude")
|
||||
if ref_lat is not None and ref_lng is not None:
|
||||
instance.coords_reference = Point(ref_lng, ref_lat, srid=4326)
|
||||
else:
|
||||
instance.coords_reference = None
|
||||
|
||||
if commit:
|
||||
instance.save()
|
||||
|
||||
return instance
|
||||
|
||||
Reference in New Issue
Block a user