Обычный способ сделать это, чтобы override the default field types в вашем определении 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, но что-то вроде this SelectDateTimeWidget patch может быть хорошим местом для начала.
Edit: При использовании ModelFormset или InlineModelFormset, вы можете достичь этого путем пропускания form=MyModelForm
к inlineformet_factory
функции:
MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm)
Это работает, потому что две модели formset фабрики фактически называют регулярные formset_factory
конструктор в их собственных реализациях. Это немного сложно понять, потому что это явно не указано в документах ... скорее, Django docs ссылаются на эту способность, попутно отмечая, что заводы фабрики форм расширяют нормальный formet_factory. Всякий раз, когда я сомневаюсь, я открываю django/forms/models.py
, чтобы проверить полную подпись заводских функций набора форм.
Спасибо за ответ Однако я забыл упомянуть, что я использую inlineformset для инициализации формы. Я также отредактировал этот вопрос. – crashekar
Не беспокойтесь ... Я обновил ответ. –
Хороший ответ. Но ... «запрещенные» означает «запрещено» - я не думаю, что это вы имели в виду. Возможно, «предписанное» ближе к значению, которое вы ищете. –