2013-02-02 44 views
14

Làm cách nào để chuyển một tham số vào biểu mẫu của tôi?Biểu mẫu Django: thông số chuyển thành biểu mẫu

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 

Chỉnh sửa, dựa trên câu trả lời dưới đây:

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})) 

Trả lời

22

Bạn nên xác định phương pháp __init__ của mẫu của bạn, như thế:

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

tất nhiên bạn không thể truy cập self.site_id cho đến khi đối tượng đã được tạo, vì vậy dòng:

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

không có ý nghĩa. Bạn phải thêm thuộc tính vào tiện ích sau khi biểu mẫu đã được tạo. Hãy thử một cái gì đó như thế này:

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() 

(không kiểm tra)

+0

Làm thế nào để tôi truy cập site_id theo hình thức? Tôi đã thử self.site_id và site_id. Điều đó cho tôi một lỗi. Tôi đã sử dụng các điểm ngắt và dường như nó đi qua tất cả các định nghĩa trường của tôi (nơi tôi cần sử dụng site_id) trước khi nó đi qua _init_ – user984003

+1

Sử dụng self.site_id để truy cập trường. Phương thức __init__ được gọi trước bất kỳ phương thức nào khác, kiểm tra lại nó. –

+0

Tôi nhận được "tên" tự "không được xác định" – user984003

Các vấn đề liên quan