forms.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from django import forms
  2. from django.contrib.gis.geos import Point
  3. from .models import Antenna
  4. class AntennaForm(forms.ModelForm):
  5. longitude = forms.FloatField(
  6. min_value=-180,
  7. max_value=180,
  8. required=False,
  9. )
  10. latitude = forms.FloatField(
  11. min_value=-90,
  12. max_value=90,
  13. required=False,
  14. )
  15. class Meta:
  16. model = Antenna
  17. fields = ('label', 'mode', 'ssid', 'mac', 'longitude', 'latitude', 'orientation', 'contact', 'notes', 'position')
  18. widgets = {'position': forms.HiddenInput}
  19. def __init__(self, *args, **kwargs):
  20. super().__init__(*args, **kwargs)
  21. coordinates = self.initial.get('position', self.instance.position)
  22. if isinstance(coordinates, Point):
  23. self.initial['longitude'], self.initial['latitude'] = coordinates.tuple
  24. def clean(self):
  25. data = super().clean()
  26. latitude = data.get('latitude')
  27. longitude = data.get('longitude')
  28. if latitude and longitude:
  29. data['position'] = Point(longitude, latitude)
  30. return data