Skip to content

Commit

Permalink
Use end date input for Event duration
Browse files Browse the repository at this point in the history
  • Loading branch information
joeriddles committed Aug 24, 2024
1 parent 3e35ae7 commit ab3684a
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions src/web/forms.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from typing import Any

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from django import forms
Expand Down Expand Up @@ -33,15 +35,24 @@ def __init__(self, *args, **kwargs):


class SuggestEventForm(forms.ModelForm):
date_time = forms.DateTimeField(widget=DateTimePickerInput)
date_time = forms.DateTimeField(
widget=DateTimePickerInput,
label="Start",
)
end_time = forms.DateTimeField(
widget=DateTimePickerInput,
label="End",
)

instance: models.Event

class Meta:
model = models.Event
fields = [
"name",
"description",
"date_time",
"duration",
"end_time",
"location",
"url",
"external_id",
Expand All @@ -55,6 +66,18 @@ def __init__(self, *args, **kwargs):
self.helper.form_class = "container-xs"
self.helper.add_input(Submit("suggest", "Suggest", css_class="float-end"))

def clean(self) -> dict[str, Any]:
cleaned_data = super().clean()
start = cleaned_data["date_time"]
end = cleaned_data["end_time"]
if start > end:
self.add_error("date_time", "Start time is after end time.")
return cleaned_data

def save(self, commit: bool = True) -> Any:
self.instance.duration = self.cleaned_data["end_time"] - self.cleaned_data["date_time"]
return super().save(commit)


class EventForm(SuggestEventForm):
date_time = forms.DateTimeField(widget=DateTimePickerInput)
Expand Down

0 comments on commit ab3684a

Please sign in to comment.