Skip to content

Commit 8f7deef

Browse files
author
Adrián Cuesta
committed
Allow datetime types
1 parent b934990 commit 8f7deef

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

Diff for: django_better_admin_arrayfield/forms/widgets.py

+21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django import forms
2+
from django.contrib.admin.widgets import AdminSplitDateTime
23

34

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

Diff for: django_better_admin_arrayfield/static/js/django_better_admin_arrayfield.js

+23-3
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+
});

Diff for: django_better_admin_arrayfield/static/js/django_better_admin_arrayfield.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)