57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from django import forms
|
|
|
|
from .models import Availability, Ride
|
|
|
|
_DT = "%Y-%m-%dT%H:%M"
|
|
|
|
|
|
class RideForm(forms.ModelForm):
|
|
"""Fahrt anlegen. Koordinaten kommen aus den (per Karte gesetzten) Hidden-Feldern."""
|
|
|
|
class Meta:
|
|
model = Ride
|
|
fields = [
|
|
"fahrgast",
|
|
"scheduled_at",
|
|
"pickup_label",
|
|
"pickup_lat",
|
|
"pickup_lng",
|
|
"dest_label",
|
|
"dest_lat",
|
|
"dest_lng",
|
|
"note",
|
|
]
|
|
widgets = {
|
|
"scheduled_at": forms.DateTimeInput(attrs={"type": "datetime-local"}, format=_DT),
|
|
"note": forms.Textarea(attrs={"rows": 2}),
|
|
"pickup_lat": forms.HiddenInput(),
|
|
"pickup_lng": forms.HiddenInput(),
|
|
"dest_lat": forms.HiddenInput(),
|
|
"dest_lng": forms.HiddenInput(),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.fields["scheduled_at"].input_formats = [_DT]
|
|
|
|
|
|
class AvailabilityForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Availability
|
|
fields = ["start", "end"]
|
|
widgets = {
|
|
"start": forms.DateTimeInput(attrs={"type": "datetime-local"}, format=_DT),
|
|
"end": forms.DateTimeInput(attrs={"type": "datetime-local"}, format=_DT),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
for name in ("start", "end"):
|
|
self.fields[name].input_formats = [_DT]
|
|
|
|
def clean(self):
|
|
cleaned = super().clean()
|
|
start, end = cleaned.get("start"), cleaned.get("end")
|
|
if start and end and end <= start:
|
|
raise forms.ValidationError("Das Ende muss nach dem Beginn liegen.")
|
|
return cleaned
|