2013-09-16 44 views
2

我想創建一個基於動態創建其字段的MultiValueField的自定義小部件。沿着線的東西:Django中的動態MultiValueField

class MyField(MultiValueField): 
    def __init__(self, my_param, *args, **kwargs): 
     fields = [] 
     for field in my_param.all(): 
      fields.append(forms.ChoiceField(
       widget=forms.Select(attrs={'class':'some_class'}))) 

    super(MyField, self).__init__(
     self, fields=tuple(fields), *args, **kwargs) 

並採用場這樣的形式:

class MyForm(forms.Form): 
    multi_field = MyField() 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['multi_field'].my_param = self.initial['car_types'].another 

我莫名其妙地停留在那一刻。當param僅在MyForm的構造函數中知道時(例如self.initial ['car_types']。another),我怎樣才能將一個參數(例如my_param)傳遞給MyField的init()方法?

回答

3

您需要實例裏面__init__你的領域:

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['multi_field'] = MyField(self.initial['car_types'].another) 
+0

沒錯,就是工作。謝謝。 – mzu

+0

......但是如果出現'FieldError:Unknown field(s)',我們的模型和MyForm不知道這個'multi_field' - 我們的ModelAdmin的字段集中給出的自定義字段,並且需要在MyForm類中定義。 –