内联formset工厂 - 将请求传递给子表单

时间:2014-02-19 09:03:45

标签: django django-forms inline-formset

我面临着极具挑战性的事情:

我需要inlineformset_factory将我的ParentEntity连接到我的外键绑定ChildEntities

我的ChildEntity包含我需要为每个登录用户进行过滤的外键关系 - 所以我需要ChildForm中的请求。

到目前为止我尝试过:

  • 我尝试使用form= kwarg,但我无法传递一个实例 - 只是一个类。所以我没办法在这里添加请求。
  • 我尝试使用formset= kwarg,但当我尝试将request=request作为inlineformset_factory的kwarg传递时,我收到错误(意外的kwarg)

知道我能做什么吗?

谢谢! 罗恩

2 个答案:

答案 0 :(得分:5)

有时候询问同事的速度甚至比StackOverflow更快:)

这是我的解决方案:

<强> 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)

答案 1 :(得分:0)

你可以这样传递:

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

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

然后在您的 ChildForm 上:

def __init__(self, *args, **kwargs):
    request = kwargs.pop('request', None)
    super(ChildForm, self).__init__(*args, **kwargs)