From 183efe3ef7daf82e853386ad6da7555a5c91d2e0 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 16 Jul 2020 14:34:19 +0200 Subject: [PATCH] misc: use Django native split datetime field (#45108) --- chrono/manager/forms.py | 16 ++++++---- .../templates/chrono/splitdatetime.html | 8 +++++ .../templates/chrono/widget_datetime.html | 4 --- chrono/manager/widgets.py | 30 ++++--------------- tests/test_misc.py | 6 ---- 5 files changed, 25 insertions(+), 39 deletions(-) create mode 100644 chrono/manager/templates/chrono/splitdatetime.html delete mode 100644 chrono/manager/templates/chrono/widget_datetime.html delete mode 100644 tests/test_misc.py diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index db5da10..e2244d7 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -42,7 +42,7 @@ from chrono.agendas.models import ( ) from . import widgets -from .widgets import DateTimeWidget +from .widgets import SplitDateTimeField class AgendaAddForm(forms.ModelForm): @@ -87,10 +87,12 @@ class NewEventForm(forms.ModelForm): model = Event widgets = { 'agenda': forms.HiddenInput(), - 'start_datetime': DateTimeWidget(), 'publication_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'), } exclude = ['full', 'meeting_type', 'desk', 'slug', 'resources'] + field_classes = { + 'start_datetime': SplitDateTimeField, + } class EventForm(forms.ModelForm): @@ -98,9 +100,11 @@ class EventForm(forms.ModelForm): model = Event widgets = { 'agenda': forms.HiddenInput(), - 'start_datetime': DateTimeWidget(), 'publication_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'), } + field_classes = { + 'start_datetime': SplitDateTimeField, + } exclude = ['full', 'meeting_type', 'desk', 'resources'] @@ -230,8 +234,10 @@ class TimePeriodExceptionForm(forms.ModelForm): fields = ['desk', 'start_datetime', 'end_datetime', 'label'] widgets = { 'desk': forms.HiddenInput(), - 'start_datetime': DateTimeWidget(), - 'end_datetime': DateTimeWidget(), + } + field_classes = { + 'start_datetime': SplitDateTimeField, + 'end_datetime': SplitDateTimeField, } def clean(self): diff --git a/chrono/manager/templates/chrono/splitdatetime.html b/chrono/manager/templates/chrono/splitdatetime.html new file mode 100644 index 0000000..13c8725 --- /dev/null +++ b/chrono/manager/templates/chrono/splitdatetime.html @@ -0,0 +1,8 @@ + +{% with widget=widget.subwidgets.0 %} + +{% endwith %} +{% with widget=widget.subwidgets.1 %} + +{% endwith %} + diff --git a/chrono/manager/templates/chrono/widget_datetime.html b/chrono/manager/templates/chrono/widget_datetime.html deleted file mode 100644 index 44c0118..0000000 --- a/chrono/manager/templates/chrono/widget_datetime.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/chrono/manager/widgets.py b/chrono/manager/widgets.py index cd24ff5..b8761f7 100644 --- a/chrono/manager/widgets.py +++ b/chrono/manager/widgets.py @@ -15,35 +15,17 @@ # along with this program. If not, see . -import datetime - -from django.forms.widgets import DateTimeInput, TimeInput, SelectMultiple -from django.utils import dateparse +from django.forms.fields import SplitDateTimeField +from django.forms.widgets import TimeInput, SelectMultiple, SplitDateTimeWidget from django.utils.safestring import mark_safe -class DateTimeWidget(DateTimeInput): - template_name = 'chrono/widget_datetime.html' +class SplitDateTimeWidget(SplitDateTimeWidget): + template_name = 'chrono/splitdatetime.html' - def format_value(self, value): - if value: - x = { - 'date': value.date().strftime('%Y-%m-%d'), - 'time': value.time().strftime('%H:%M'), - } - return x - return None - def value_from_datadict(self, data, files, name): - date_string = data.get(name + '$date') - time_string = data.get(name + '$time') - if not date_string or not time_string: - return None - date_value = dateparse.parse_date(date_string) - time_value = dateparse.parse_time(time_string) - if not date_value or not time_value: - return None - return datetime.datetime.combine(date_value, time_value) +class SplitDateTimeField(SplitDateTimeField): + widget = SplitDateTimeWidget class TimeWidget(TimeInput): diff --git a/tests/test_misc.py b/tests/test_misc.py deleted file mode 100644 index c2610b1..0000000 --- a/tests/test_misc.py +++ /dev/null @@ -1,6 +0,0 @@ -from chrono.manager.widgets import DateTimeWidget, TimeWidget - - -def test_widgets_init(): - DateTimeWidget() - TimeWidget() -- 2.27.0