2013-09-16 3 views
2

Я пытаюсь создать собственный виджет на основе MultiValueField, который динамически создает свои поля. Что-то вдоль линий:Динамический MultiValueField в Django

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 

Я как-то застрял в данный момент. Как передать параметр (например, my_param) в метод MyField init(), когда параметр известен только из конструктора MyForm (например, self.initial ['car_types']. Другой)?

ответ

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. –

Смежные вопросы