2013-02-02 15 views
14

フォームにパラメータを渡すにはどうすればよいですか?Djangoフォーム:フォームに渡すパラメータ

someView().. 
    form = StylesForm(data_dict) # I also want to pass in site_id here. 

class StylesForm(forms.Form): 
    # I want access to site_id here 

編集、下記の回答に基づいて:もちろん

class StylesForm(forms.Form): 
    def __init__(self,*args,**kwargs): 
     self.site_id = kwargs.pop('site_id') 
     super(StylesForm,self).__init__(*args,**kwargs) 

あなたがするまでself.site_idにアクセスすることはできません。

someView().. 
    form = StylesForm(data_dict, site_id = 1) 

class StylesForm(forms.Form): 
    def __init__(self,*args,**kwargs): 
     self.site_id = kwargs.pop('site_id') 
     super(StylesForm,self).__init__(*args,**kwargs) 

    height = forms.CharField(widget=forms.TextInput(attrs={'size':site_id})) 

答えて

22

あなたがそのように、フォームの__init__メソッドを定義する必要がありますオブジェクトが作成されたので、行:

 height = forms.CharField(widget=forms.TextInput(attrs={'size':site_id})) 

は意味がありません。フォームが作成された後、属性をウィジェットに追加する必要があります。私は、フォームでSITE_IDにアクセスするにはどうすればよい

class StylesForm(forms.Form): 
    def __init__(self,*args,**kwargs): 
     self.site_id = kwargs.pop('site_id') 
     super(StylesForm,self).__init__(*args,**kwargs) 
     self.fields['height'].widget = forms.TextInput(attrs={'size':site_id}) 

    height = forms.CharField() 

(テストしていません)

+0

:このような何かを試してみてください?私はself.site_idとsite_idを試しました。それは私に誤りを与える。私はブレークポイントを使用していましたが、_init_ – user984003

+1

を通過する前に、すべてのフィールド定義(site_idを使用する必要がある)を通過したようです。self.site_idを使用してフィールドにアクセスしてください。 __init__メソッドは、他のメソッドの前に呼び出されます。ダブルチェックしてください。 –

+0

"name 'self'が定義されていません。 – user984003

関連する問題