【问题标题】: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)
    

    【讨论】:

    • 你能在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2012-11-27
      • 2018-06-10
      • 1970-01-01
      相关资源
      最近更新 更多