2009-07-27 4 views
0

Я хотел бы использовать следующий класс формы в modelformset. Он принимает параметры и настраивает поля формы соответственно.Настройка полей modelformset в Django

class MyModelForm(forms.ModelForm): 
    def __init__(self, maps, *args, **kwargs): 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     #customize fields here 

    class Meta: 
     model = MyModel 

Мой вопрос: как использовать эту форму в modelformset? Когда я передаю его, используя параметр , как показано ниже, я получаю исключение.

MyFormSet = modelformset_factory(MyModel, form=MyModelForm(maps)) 

Я подозреваю, что он хочет, чтобы класс формы только, если это так, как я передать карты параметр в форме?

+0

Точный дубликат: http://stackoverflow.com/questions/622982/django-passing-custom-form-parameters-to-formset/ –

ответ

2

Имейте в виду, что Django использует класс определение как своего рода DSL для определения различных вещей. Таким образом, создание экземпляров в тех местах, где он ожидает, что объект класса будет нарушать вещи.

Один из подходов - создать свою собственную фабрику форм. Что-то вроде:

def mymodelform_factory(maps): 
    class MyModelForm(forms.ModelForm): 
      def __init__(self, *args, **kwargs): 
       super(MyModelForm, self).__init__(*args, **kwargs) 
       #use maps to customize form delcaration here 
      class Meta: 
       model = myModel 
    return MyModelForm 

Тогда вы можете сделать:

MyFormSet = modelformset_factory(MyModel, form=mymodelform_factory(maps)) 
+0

Спасибо, именно то, что я искал – drjeep

+0

Недостатком определения вашего класса внутри фабричной функции является то, что вы больше не можете подклассифицировать его. Если это вас беспокоит, вы также можете использовать это решение: http://stackoverflow.com/questions/622982/django-passing-custom-form-parameters-to-formset/624013#624013 –

+0

Спасибо за ссылку, очень информативную тему – drjeep

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