Django - Передача пользовательских параметров формы в модельзавод

У меня есть Django ModelForm, как это:

class ContactPhoneForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ContactPhoneForm, self).__init__(*args, **kwargs)
    #....

... и представление, где я пытаюсь получить соответствующий набор форм:

ContactPhoneFormSet = modelformset_factory(ContactPhone,
                                           ContactPhoneForm, 
                                           extra=1, 
                                           can_delete = True)

Теперь я хочу, чтобы дополнительный параметр был передан __init__метод формы:

 class ContactPhoneForm(forms.ModelForm):
        def __init__(self, contact_id, *args, **kwargs):    
            self.contact_id = contact_id
            super(ContactPhoneForm, self).__init__(*args, **kwargs)
        #....

Я попытался переписать мой взгляд в соответствии с этим постом:

ContactPhoneFormSet = modelformset_factory(ContactPhone,
                                           wraps(ContactPhoneForm)(partial(ContactPhoneForm, contact_id=contact_id)), 
                                           extra=1, 
                                           can_delete = True)

но я в конечном итоге TypeError: the first argument must be callable ошибка. Любая помощь в этом?

1 ответ

Решение

Django 1.9 добавил аргумент form_kwargs, чтобы вы могли сделать:

ContactPhoneFormSet = modelformset_factory(
    ContactPhone, ContactPhoneForm, extra=1, can_delete=True)
formset = ContactPhoneFormSet(form_kwargs={'contact_id': contact_id})
Другие вопросы по тегам