Skip to content

Commit 05fd783

Browse files
committed
Allow datetime types
1 parent b934990 commit 05fd783

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

django_better_admin_arrayfield/forms/widgets.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from django import forms
2+
from django.contrib.admin.widgets import AdminSplitDateTime
3+
from django.utils.dateparse import parse_datetime
24

35

46
class DynamicArrayWidget(forms.TextInput):
@@ -46,3 +48,24 @@ class DynamicArrayTextareaWidget(DynamicArrayWidget):
4648
def __init__(self, *args, **kwargs):
4749
kwargs.setdefault("subwidget_form", forms.Textarea)
4850
super().__init__(*args, **kwargs)
51+
52+
class DatetimeWidget(DynamicArrayWidget):
53+
"""Datetime widget for array datetime lists"""
54+
55+
def __init__(self, *args, **kwargs):
56+
kwargs['subwidget_form'] = AdminSplitDateTime
57+
super().__init__(*args, **kwargs)
58+
59+
def value_from_datadict(self, data, files, name):
60+
try:
61+
getter = data.getlist
62+
dates = getter(name + '_0')
63+
times = getter(name + '_1')
64+
return_data = []
65+
for i in range(len(dates)):
66+
if dates[i] and times[i]:
67+
return_data.append(parse_datetime(
68+
' '.join([dates[i], times[i]])))
69+
return return_data
70+
except AttributeError:
71+
return data.get(name)

django_better_admin_arrayfield/static/js/django_better_admin_arrayfield.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,29 @@ window.addEventListener('load', function () {
3333

3434
addRemoveEventListener(newElement);
3535
parentElement.appendChild(newElement);
36-
});
37-
}
3836

37+
for (const inp of document.getElementsByTagName('input')) {
38+
if (
39+
inp.type === 'text' &&
40+
inp.classList.contains('vTimeField') &&
41+
!inp.nextSibling?.classList.contains('datetimeshortcuts')
42+
) {
43+
DateTimeShortcuts.addClock(inp);
44+
DateTimeShortcuts.addTimezoneWarning(inp);
45+
inp.value = '';
46+
} else if (
47+
inp.type === 'text' &&
48+
inp.classList.contains('vDateField') &&
49+
!inp.nextSibling?.classList.contains('datetimeshortcuts')
50+
) {
51+
DateTimeShortcuts.addCalendar(inp);
52+
DateTimeShortcuts.addTimezoneWarning(inp);
53+
inp.value = '';
54+
}
55+
}
56+
});
57+
}
58+
3959
django.jQuery(".dynamic-array-widget").not(".empty-form .dynamic-array-widget").each(
4060
(index, widgetElement) => initializeWidget(widgetElement)
4161
);
@@ -45,4 +65,4 @@ window.addEventListener('load', function () {
4565
widgetElement => initializeWidget(widgetElement)
4666
);
4767
});
48-
});
68+
});

django_better_admin_arrayfield/static/js/django_better_admin_arrayfield.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)