2013-02-02 99 views
14

如何將參數傳遞給我的表單?Django Forms:將參數傳遞給表格

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 

編輯,基於以下答案:

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__方法的形式,這樣的:

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直到

該對象已創建,所以行:

 height = forms.CharField(widget=forms.TextInput(attrs={'size':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

如何在形式的訪問SITE_ID?我試過self.site_id和site_id。這給了我一個錯誤。我使用了斷點,它似乎在它通過_init_ – user984003

+1

使用self.site_id來訪問該字段之前,通過了我所有的字段定義(我需要使用site_id)。在任何其他方法之前調用__init__方法,請仔細檢查它。 –

+0

我得到了「名稱」「自己」未定義「 – user984003