2009-05-18 31 views
3

モデルの2つの日付フィールド(モデルのDateTimeField)を持つモデルには、formsetというモデルがあります。 テンプレートに表示されるときは、テキストフィールドとして表示されます。 どうすればドロップダウンボックスとして表示できますか?モデルの書式設定と日付フィールド

WFormSet = inlineformset_factory(UserProfile, W, can_delete=False,exclude=[<list of fields to be excluded>], extra=3) 

これは、私がmodelformsetを初期化する方法です。

どのように私はこれを行うための通常の方法は、あなたのModelForm定義でoverride the default field typesにあるこれらの設定に

答えて

6

を上書きします。

モデルに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 

ジャンゴ1.0.xではでDateTimeFieldのために提供同等のウィジェットは、私の知る限りでは、ありませんこの場合、おそらくサブクラス化するSelectDateWidgetというカスタムウィジェットを作成する必要があります。私はSelectDateTimeWidgetの簡単なgoogleから、あなたが探しているウィジェットのように見えるものを作っているいくつかの人がいたことに気づいた。私はそれらを使用していないので、emptor注意してくださいが、this SelectDateTimeWidget patchのようなものは、開始するには良い場所かもしれません。


編集:ModelFormsetまたはInlineModelFormsetを使用している場合、あなたはまだinlineformet_factory機能にform=MyModelFormを渡すことによって、これを達成することができます:2つのモデルフォームセットの工場は、実際には正規formset_factoryコンストラクタを呼び出すため

MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm) 

これは動作します独自の実装ではDjangoのドキュメントでは、モデルのformsetファクトリが通常のformset_factoryを継承していることを述べることで、この機能を暗に指摘しています。疑いがある場合はいつでも、私はdjango/forms/models.pyを開いて、formsetファクトリ関数の完全なシグネチャをチェックします。

+0

返信ありがとう、 しかし、私はフォームを初期化するためにinlineformsetを使用していることを忘れています。私もその質問を編集しました。 – crashekar

+0

心配しないで...私は答えを更新しました。 –

+0

良い答え。しかし...「禁じられている」とは禁じられていることを意味しています。おそらく、「処方された」とは、あなたが探している意味に近いでしょう。 –