内联表单集工厂 - 将请求传递给子表单
Posted
技术标签:
【中文标题】内联表单集工厂 - 将请求传递给子表单【英文标题】:Inline formset factory - pass request to child form 【发布时间】:2014-03-19 11:48:58 【问题描述】:我面临着相当具有挑战性的任务:
我需要一个inlineformset_factory
将我的ParentEntity
连接到我的外键绑定ChildEntities
。
我的ChildEntity
包含我需要过滤每个登录用户的外键关系 - 所以我需要ChildForm
中的请求。
到目前为止我已经尝试过:
我尝试使用form=
kwarg,但我无法传递实例 - 只是一个类。所以我无法在此处添加请求。
我尝试使用 formset=
kwarg,但是当我尝试将 request=request
作为 inlineformset_factory
的 kwarg 传递时,我收到一个错误(Unexpected kwarg)
知道我能做什么吗?
谢谢! 罗恩
【问题讨论】:
【参考方案1】:有时问同事比***
还要快:)
这是我的解决方案:
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)
【讨论】:
你能在 ChildForm 中得到请求吗?【参考方案2】:你可以这样传递:
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)
【讨论】:
以上是关于内联表单集工厂 - 将请求传递给子表单的主要内容,如果未能解决你的问题,请参考以下文章