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

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)

【讨论】:

以上是关于内联表单集工厂 - 将请求传递给子表单的主要内容,如果未能解决你的问题,请参考以下文章

将查询集传递给 django 内联表单中的外键字段

将 Angular Reactive FormControls 传递给子组件

Django 内联表单集将始终创建新对象而不是更新它们

Django 表单向导 - 将请求传递给视图?

Django内联表单集错误

Laravel 表单请求未传递给参数