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

9rnv2umw  于 2022-11-26  发布在  Go
关注(0)|答案(2)|浏览(107)

我面临着一个相当具有挑战性的问题:
我需要一个inlineformset_factory将我的ParentEntity连接到我的外键绑定的ChildEntities
我的ChildEntity包含一个外键关系,我需要按登录用户过滤-所以我需要ChildForm中的请求。
到目前为止,我已经尝试过:

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

你知道我能做什么吗?

enyaitl3

enyaitl31#

有时问同事甚至比StackOverflow还快:)
我的解决方案是:

表单.py

class BaseFormSet(BaseInlineFormSet):

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

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

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

查看次数.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)
fkaflof6

fkaflof62#

你可以这样传递:

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)

相关问题