これを行う通常の方法は、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
。簡単なグーグルでSelectDateTimeWidget
、あなたが探しているウィジェットのように見えるものを作っている人が他にも何人かいることに注意してください。私はそれらを使用していないので、emptor に注意してください。ただし、この SelectDateTimeWidget パッチのようなものから始めるのがよいでしょう。
編集: ModelFormset または InlineModelFormset を使用する場合でもform=MyModelForm
、inlineformet_factory
関数に渡すことでこれを実現できます。
MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm)
これが機能するのは、2 つのモデル フォームセット ファクトリが実際にformset_factory
独自の実装で通常のコンストラクタを呼び出すためです。ドキュメントに明示的に記載されていないため、理解するのは少し難しいです...むしろ、Django ドキュメントでは、モデルのフォームセット ファクトリが通常の formset_factory を拡張することを言及することで、この機能をほのめかしています。疑問があるときはいつでもdjango/forms/models.py
、フォームセット ファクトリ関数の完全な署名を確認するために開きます。