2017-06-11 3 views
1

HiddenInputフォームフィールドの初期値をMetaクラスのModelFormオブジェクトに渡したいとします。フィールドが非表示でない場合、たとえばよう:隠しModelFormフィールドDjangoのデフォルト値を設定

class Meta: 
    model = SomeModel 
    fields = ['some_id', 'some_amount',] 

と私は、このフォームのコンストラクタにkwargsを経由して初期値を渡し、その後、初期値が正しくこれらのフィールドに設定されています。

しかし、1つのフィールドを非表示にしようとすると(ただし、まだ初期値(kwargs)に設定する必要があります)。

class Meta: 
    model = SomeModel 
    widgets = {'ord_id': forms.HiddenInput(),} 
    fields = ['some_id', 'some_amount',] 

が続い'ord_id'kwargsから初期値に設定されていないと、このようなフォームを送信しようとしたとき、私は次のエラーを取得する:として

(隠しフィールドord_id)有効な項目を選択します。その選択肢は選択肢の1つではありません

隠しフォームフィールドに正しく初期値を渡す方法はありますか?

+0

私たちのmodels.pyを提供してください。エラーは、無効な値を提供しようとしています。ord_id – rsb

答えて

0

デフォルト値をformフィールドに設定するには、2通りの方法があります。

第一の方法は、あなたのview.pyすなわち

from forms import ExampleForm 

INITIAL_DATA = {'ord_id': 'some_id'} 

def my_view(request): 
    ... 

    if request.method == 'GET': 
     form = ExampleForm(initial=INITIAL_DATA) 
    if request.method == 'POST': 
     form = ExampleForm(request.POST) 
    ... 

セカンドでフォームを初期化するには、デフォルト値をしながら、渡すことで

クラスExampleForm(forms.ModelForm)すなわちフォーム__init__メソッドをオーバーライドすることである。

def __init__(self, *args, **kwargs): 
    """If no initial data, provide some defaults.""" 
    initial = kwargs.get('initial', {}) 
    initial['ord_id'] = 'ord_id' 
    kwargs['initial'] = initial 
    super(ExampleForm, self).__init__(*args, **kwargs) 
+0

kwargs initial argumentに必要な引数を既に追加しました。しかし、これは問題ではなく、 'ord_id'が 'initial'ディクショナリであっても、このフィールドウィジェットが 'forms.HiddenInput()'に設定されている場合、 'ord_id'フィールドは初期化されません。 このウィジェットを使用しないとすべて正常に動作しますが、 'ord_id'フィールドは 'initial' kwargs dictの値で初期化されています。 –

1

検査ツールを使用して、選択要素に実際に反映されていることを確認した場合は、 tオプションを選択した場合、フィールドは単に隠されているのではなく何らかの形で無効になっている可能性があります。無効なフィールドを送信しようとすると、同様のエラーメッセージが表示されています。そうでない場合は、フィールドを非表示にする別の解決策があるかもしれません。

djangoテンプレートを使用している場合は、widget tweaksを使用してテンプレート内のフォームフィールドを変更することができます。クラスやスタイルの追加、値の変更などができます。したがって、初期の引数をフォームに渡すことができます。また、テンプレートタグを使用して非表示にすることもできます。これはあなたのために働くことを望みます!

{% for field in form %} 
    {% if field == form.hidden_field_name %} 
     {% render_field field hidden='True' id='hidden-field' class='hidden-field-class' %} 
    {% endif %} 
{% endfor %} 
関連する問題