Обычный способ сделать это - переопределить типы полей по умолчанию в определении ModelForm.
Пример ниже будет работать, если у вас есть DateField в вашей модели (отмечу, что у вас есть DateTimeField ... Я вернусь к этому через секунду). Вы будете указывать точно такой же тип поля, как обычно, но вы передадите другой виджет конструктору поля формы.
from django.db import models
from django import forms
from django.forms.extras import SelectDateWidget
class MyModel(models.Model):
a_date_field = models.DateField()
class MyModelForm(forms.ModelForm):
a_date_field = forms.DateField(widget=SelectDateWidget())
class Meta:
model = MyModel
Насколько мне известно, нет эквивалентного виджета для DateTimeField
в Django 1.0.x. В этом случае вы захотите создать собственный виджет, возможно, подклассы SelectDateWidget
. Я быстро заметил в Google на SelectDateTimeWidget
, что было несколько других, которые создавали виджет, который вы ищете. Я не использовал их, поэтому будьте осторожны с emptor, но что-то вроде этот патч SelectDateTimeWidget может быть хорошим местом для начала.
Редактировать: при использовании ModelFormset или InlineModelFormset вы все равно можете достичь этого, передав form=MyModelForm
в функцию inlineformet_factory
:
MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm)
Это работает, потому что две фабрики модельных наборов фактически вызывают обычный конструктор formset_factory
в своих собственных реализациях. Это немного сложно понять, потому что это явно не указано в документах ... скорее, документы Django ссылаются на эту возможность, мимоходом упоминая, что фабрики форм-наборов моделей расширяют нормальный formset_factory. Всякий раз, когда я сомневаюсь, я открываю django/forms/models.py
, чтобы проверить полную подпись фабричных функций набора форм.