mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:51:09 -05:00
initial geodjango implementation
This commit is contained in:
124
parks/forms.py
124
parks/forms.py
@@ -5,6 +5,64 @@ from .models import Park
|
||||
|
||||
class ParkForm(forms.ModelForm):
|
||||
"""Form for creating and updating Park objects with location support"""
|
||||
# Location fields
|
||||
latitude = forms.DecimalField(
|
||||
max_digits=9,
|
||||
decimal_places=6,
|
||||
required=False,
|
||||
widget=forms.HiddenInput()
|
||||
)
|
||||
longitude = forms.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=6,
|
||||
required=False,
|
||||
widget=forms.HiddenInput()
|
||||
)
|
||||
street_address = forms.CharField(
|
||||
max_length=255,
|
||||
required=False,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
)
|
||||
)
|
||||
city = forms.CharField(
|
||||
max_length=255,
|
||||
required=False,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
)
|
||||
)
|
||||
state = forms.CharField(
|
||||
max_length=255,
|
||||
required=False,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
)
|
||||
)
|
||||
country = forms.CharField(
|
||||
max_length=255,
|
||||
required=False,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
)
|
||||
)
|
||||
postal_code = forms.CharField(
|
||||
max_length=20,
|
||||
required=False,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Park
|
||||
@@ -18,6 +76,7 @@ class ParkForm(forms.ModelForm):
|
||||
"operating_season",
|
||||
"size_acres",
|
||||
"website",
|
||||
# Location fields handled separately
|
||||
"latitude",
|
||||
"longitude",
|
||||
"street_address",
|
||||
@@ -79,36 +138,21 @@ class ParkForm(forms.ModelForm):
|
||||
"placeholder": "https://example.com",
|
||||
}
|
||||
),
|
||||
# Location fields
|
||||
"latitude": forms.HiddenInput(),
|
||||
"longitude": forms.HiddenInput(),
|
||||
"street_address": forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
),
|
||||
"city": forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
),
|
||||
"state": forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
),
|
||||
"country": forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
),
|
||||
"postal_code": forms.TextInput(
|
||||
attrs={
|
||||
"class": "w-full border-gray-300 rounded-lg form-input dark:border-gray-600 dark:bg-gray-700 dark:text-white"
|
||||
}
|
||||
),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
# Pre-fill location fields if editing existing park
|
||||
if self.instance and self.instance.pk and self.instance.location.exists():
|
||||
location = self.instance.location.first()
|
||||
self.fields['latitude'].initial = location.latitude
|
||||
self.fields['longitude'].initial = location.longitude
|
||||
self.fields['street_address'].initial = location.street_address
|
||||
self.fields['city'].initial = location.city
|
||||
self.fields['state'].initial = location.state
|
||||
self.fields['country'].initial = location.country
|
||||
self.fields['postal_code'].initial = location.postal_code
|
||||
|
||||
def clean_latitude(self):
|
||||
latitude = self.cleaned_data.get('latitude')
|
||||
if latitude is not None:
|
||||
@@ -146,3 +190,27 @@ class ParkForm(forms.ModelForm):
|
||||
except (InvalidOperation, TypeError):
|
||||
raise forms.ValidationError("Invalid longitude value.")
|
||||
return longitude
|
||||
|
||||
def save(self, commit=True):
|
||||
park = super().save(commit=False)
|
||||
|
||||
# Prepare location data
|
||||
location_data = {
|
||||
'name': park.name,
|
||||
'location_type': 'park',
|
||||
'latitude': self.cleaned_data.get('latitude'),
|
||||
'longitude': self.cleaned_data.get('longitude'),
|
||||
'street_address': self.cleaned_data.get('street_address'),
|
||||
'city': self.cleaned_data.get('city'),
|
||||
'state': self.cleaned_data.get('state'),
|
||||
'country': self.cleaned_data.get('country'),
|
||||
'postal_code': self.cleaned_data.get('postal_code'),
|
||||
}
|
||||
|
||||
# Set location data to be saved with the park
|
||||
park.set_location(**location_data)
|
||||
|
||||
if commit:
|
||||
park.save()
|
||||
|
||||
return park
|
||||
|
||||
Reference in New Issue
Block a user