Вопрос

I'm facing a quite challenging taks:

I need an inlineformset_factory connecting my ParentEntity to my foreign key-bound ChildEntities.

My ChildEntity contains a foreign key relation I need to filter per logged-in user - so I need the request in the ChildForm.

What I've tried so far:

  • I tried to use the form= kwarg but I can't pass an instance - just a class. So no way for me to add the request here.
  • I tried to use the formset= kwarg but when I try to pass the request=request as a kwarg of the inlineformset_factory I get an error (Unexpected kwarg)

Any idea what I can do?

Thanks! Ron

Это было полезно?

Решение

Sometimes asking a colleague is even faster than StackOverflow :)

Here's my solution:

forms.py

class BaseFormSet(BaseInlineFormSet):

def __init__(self, *args, **kwargs):

    self.request = kwargs.pop("request", None)

    super(BaseFormSet, self).__init__(*args, **kwargs)

views.py

MyFormSet = inlineformset_factory(ParentEntity, ChildEntity, formset=BaseFormSet, form=ChildForm, extra=2, max_num=max_num, can_delete=False)
...
formset = MyFormSet(request.POST, instance=obj, request=request)

Другие советы

you can pass it this way:

MyFormSet = inlineformset_factory(ParentEntity, ChildEntity, formset=BaseFormSet, form=ChildForm, extra=1)

formset = MyFormSet(form_kwargs={'request': request})

Then on your ChildForm:

def __init__(self, *args, **kwargs):
    request = kwargs.pop('request', None)
    super(ChildForm, self).__init__(*args, **kwargs)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top