Добавил работу с заявками на кубсат
This commit is contained in:
@@ -913,3 +913,134 @@ class SatelliteForm(forms.ModelForm):
|
||||
raise forms.ValidationError('Спутник с таким названием уже существует')
|
||||
|
||||
return name
|
||||
|
||||
|
||||
class SourceRequestForm(forms.ModelForm):
|
||||
"""
|
||||
Форма для создания и редактирования заявок на источники.
|
||||
"""
|
||||
|
||||
# Дополнительные поля для координат
|
||||
coords_lat = forms.FloatField(
|
||||
required=False,
|
||||
label='Широта',
|
||||
widget=forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'step': '0.000001',
|
||||
'placeholder': 'Например: 55.751244'
|
||||
})
|
||||
)
|
||||
coords_lon = forms.FloatField(
|
||||
required=False,
|
||||
label='Долгота',
|
||||
widget=forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'step': '0.000001',
|
||||
'placeholder': 'Например: 37.618423'
|
||||
})
|
||||
)
|
||||
|
||||
class Meta:
|
||||
from .models import SourceRequest
|
||||
model = SourceRequest
|
||||
fields = [
|
||||
'source',
|
||||
'status',
|
||||
'priority',
|
||||
'planned_at',
|
||||
'request_date',
|
||||
'gso_success',
|
||||
'kubsat_success',
|
||||
'comment',
|
||||
]
|
||||
widgets = {
|
||||
'source': forms.Select(attrs={
|
||||
'class': 'form-select',
|
||||
'required': True
|
||||
}),
|
||||
'status': forms.Select(attrs={
|
||||
'class': 'form-select'
|
||||
}),
|
||||
'priority': forms.Select(attrs={
|
||||
'class': 'form-select'
|
||||
}),
|
||||
'planned_at': forms.DateTimeInput(attrs={
|
||||
'class': 'form-control',
|
||||
'type': 'datetime-local'
|
||||
}),
|
||||
'request_date': forms.DateInput(attrs={
|
||||
'class': 'form-control',
|
||||
'type': 'date'
|
||||
}),
|
||||
'gso_success': forms.Select(
|
||||
choices=[(None, '-'), (True, 'Да'), (False, 'Нет')],
|
||||
attrs={'class': 'form-select'}
|
||||
),
|
||||
'kubsat_success': forms.Select(
|
||||
choices=[(None, '-'), (True, 'Да'), (False, 'Нет')],
|
||||
attrs={'class': 'form-select'}
|
||||
),
|
||||
'comment': forms.Textarea(attrs={
|
||||
'class': 'form-control',
|
||||
'rows': 3,
|
||||
'placeholder': 'Введите комментарий'
|
||||
}),
|
||||
}
|
||||
labels = {
|
||||
'source': 'Источник',
|
||||
'status': 'Статус',
|
||||
'priority': 'Приоритет',
|
||||
'planned_at': 'Дата и время планирования',
|
||||
'request_date': 'Дата заявки',
|
||||
'gso_success': 'ГСО успешно?',
|
||||
'kubsat_success': 'Кубсат успешно?',
|
||||
'comment': 'Комментарий',
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# Извлекаем source_id если передан
|
||||
source_id = kwargs.pop('source_id', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Загружаем queryset для источников
|
||||
self.fields['source'].queryset = Source.objects.all().order_by('-id')
|
||||
|
||||
# Если передан source_id, устанавливаем его как начальное значение
|
||||
if source_id:
|
||||
self.fields['source'].initial = source_id
|
||||
# Можно сделать поле только для чтения
|
||||
self.fields['source'].widget.attrs['readonly'] = True
|
||||
|
||||
# Настраиваем виджеты для булевых полей
|
||||
self.fields['gso_success'].widget = forms.Select(
|
||||
choices=[(None, '-'), (True, 'Да'), (False, 'Нет')],
|
||||
attrs={'class': 'form-select'}
|
||||
)
|
||||
self.fields['kubsat_success'].widget = forms.Select(
|
||||
choices=[(None, '-'), (True, 'Да'), (False, 'Нет')],
|
||||
attrs={'class': 'form-select'}
|
||||
)
|
||||
|
||||
# Заполняем координаты из существующего объекта
|
||||
if self.instance and self.instance.pk and self.instance.coords:
|
||||
self.fields['coords_lat'].initial = self.instance.coords.y
|
||||
self.fields['coords_lon'].initial = self.instance.coords.x
|
||||
|
||||
def save(self, commit=True):
|
||||
from django.contrib.gis.geos import Point
|
||||
|
||||
instance = super().save(commit=False)
|
||||
|
||||
# Обрабатываем координаты
|
||||
coords_lat = self.cleaned_data.get('coords_lat')
|
||||
coords_lon = self.cleaned_data.get('coords_lon')
|
||||
|
||||
if coords_lat is not None and coords_lon is not None:
|
||||
instance.coords = Point(coords_lon, coords_lat, srid=4326)
|
||||
elif coords_lat is None and coords_lon is None:
|
||||
instance.coords = None
|
||||
|
||||
if commit:
|
||||
instance.save()
|
||||
|
||||
return instance
|
||||
|
||||
Reference in New Issue
Block a user