2012-01-16 18 views
1

は、私は次のコードがあるとします。Djangoフォームのclean()メソッドでauto_idを取得する方法は?

class AForm(forms.Form): 
    field = forms.ChoiceField(
     choices=(
      ('a', _('Some option')), 
     ), 
     widget=forms.Select() 
    ) 

    def clean(self): 
     cd = self.cleaned_data 
     widget_id = # How do I get the auto generated id here? 

を私はあなたがテンプレートでauto_idを得ることができます理解し、私は私たちのAJAX応答でそのような情報を含めるようにしたいと思います。

+0

一つの選択肢、IDとしてフィールドの単純なスキーム "id_" + field_nameを使用します。あなたの例では、フィールドidは "id_field"でなければなりません。 – demalexx

+0

@demalexxそれは本当です。 :]。しかし、私の質問は実現可能ですか?プログラム的に取得する方法がない場合は、すべてのフィールドのIDを手動で記述する必要があります。 –

+0

ハングオン、それは 'クリーン'かAJAXレスポンスで必要ですか?それは2つの異なる質問です。 –

答えて

1

私はDjangoのフォームのコードを見て、これが動作する必要があることが見つかりました:

class AForm(forms.Form): 
    ... 

    def clean(self): 
     cd = self.cleaned_data 
     widget_id = self['field'].auto_id 

トリックは、順番にBaseForm.__getitem__を呼び出し、それがBoundFieldインスタンスを返すことを、我々はForm['field']を使用しています。 BoundFieldには、auto_idのような興味深いプロパティがいくつかあります。フォームのprefix属性を尊重しているようです。

私はそれがこれを行うには大丈夫ですかどうかわからないんだけど、私が最初にそれをやったので、あなたはそれが大丈夫だということを調査するまで、私はそれを使用してお勧めしません:)

+0

ヒントをありがとう。私はそれを試して、私が見つけることができるものを見てみましょう。 –

+0

私はこの属性にアクセスすることによって副作用に気付きません。乾杯! –

関連する問題