これは、ModelForm のすべての Django 日付フィールドのデフォルト ウィジェットをどのように変更しますか?のフォローアップです。.
非常に多数のモデル (A-ZZZ など) があり、制御できない他の開発者の入力によって成長し、すべての日付フィールドの入力方法を変更したいとします (つまり、jQueryUI を使用する)。その新しいウィジェットを使用してすべての日付フィールドが確実に入力されるようにする最善の方法は何ですか?
引用された質問からの1つの提案は次のとおりです。
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設定は次のようになります:
url(r'^A/?$', 'list_detail.object_list', SomeModelA)
SomeModelA は、バックグラウンドで Django によって ModelForm に変換されるモデル (フォームではない) です。
現在、私のシステムには各モデルのフォームがありません。フォームを明示的に作成する唯一のポイントは、以前のソリューションで提案された formfield_callback を追加することですが、これは DRY の原則に反し、エラーが発生しやすく、労力がかかります。
(最後のスレッドで提案されているように) 特別なウィジェットを持つ独自のフィールドを作成し、組み込みの代わりにそれを使用することを検討しました。それほど労働集約的ではありませんが、エラーが発生する可能性があります (ただし、優れた grep で修正できないものは何もありません)。
提案や考えを歓迎します。