【问题标题】: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)
知道我能做什么吗?
谢谢!
罗恩
【问题讨论】:
标签:
django
django-forms
inline-formset
【解决方案1】:
有时问同事比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)
【解决方案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)