Это продолжение Как изменить виджет по умолчанию для всех полей даты Django в ModelForm? .
Предположим, у вас очень большое количество моделей (например, A-ZZZ), которое растет благодаря вкладу других разработчиков, которые находятся вне вашего контроля, и вы хотите изменить способ ввода всех полей даты (например, с помощью jQueryUI). ). Каков наилучший способ обеспечить заполнение всех полей даты с помощью этого нового виджета?
Одно предложение из приведенного вопроса было:
def make_custom_datefield(f):
if isinstance(f, models.DateField):
# return form field with your custom widget here...
else:
return f.formfield()
class SomeForm(forms.ModelForm):
formfield_callback = make_custom_datefield
class Meta:
# normal modelform stuff here...
Однако возможно ли это сделать там, где у вас нет явных ModelForm, но шаблоны URL приходят из моделей напрямую? т. е. ваша конфигурация url - likeo:
url(r'^A/?$', 'list_detail.object_list', SomeModelA)
где SomeModelA - это модель (а не форма), которую Джанго на заднем плане превратил в ModelForm.
В настоящее время в моей системе нет форм для каждой модели. Единственной точкой явного создания форм является добавление formfield_callback, предложенного в предыдущем решении, но это идет вразрез с принципами DRY и может привести к ошибкам и трудоемкости.
Я рассмотрел (как предлагалось в предыдущем потоке) создание собственного поля со специальным виджетом и использование его вместо встроенного. Это не так трудоемко, но может привести к ошибкам (однако, ничего хорошего не может исправить).
Предложения и мысли приветствуются.