Python formset、inlineformset_工厂和kwargs

Python formset、inlineformset_工厂和kwargs,python,django,django-forms,inline-formset,Python,Django,Django Forms,Inline Formset,我有两种型号,我们称它们为a型和B型。B中有a的外键。 这就是A和B之间的基数是1:n 我为B制作了一个相应的模型,名为MF_B。我在B中定义了一个额外的字段 class MF_B(forms.ModelForm): stuff = forms.MultipleChoiceField(queryset=None, required=False) class Meta: model=B 正如上面的代码所暗示的,我想用queryset填充这里的选项。(我省略了i

我有两种型号,我们称它们为a型和B型。B中有a的外键。
这就是A和B之间的基数是1:n

我为B制作了一个相应的模型,名为MF_B。我在B中定义了一个额外的字段

class MF_B(forms.ModelForm):

    stuff = forms.MultipleChoiceField(queryset=None, required=False)

    class Meta:
        model=B
正如上面的代码所暗示的,我想用queryset填充这里的选项。(我省略了init()中用于在stuff字段上设置queryset的重写代码)

交易是我想使用inlineformset_工厂在一个页面上创建一个带有a的表单,以及几个带有B的表单

我只想把一堆新的KWARG传递给inlineformset_工厂,但它一直在抱怨意外的关键字参数,在查看django中的后端代码后,我理解了原因:inlineformset_工厂不接受自定义KWARG。它只接受方法sig中定义的KWARG

def inlineformset_factory(parent_model, model, form=ModelForm,
                          formset=BaseInlineFormSet, fk_name=None,
                          fields=None, exclude=None,
                          extra=3, can_order=False, can_delete=True, max_num=None,
                          formfield_callback=None):
我认为我不能使用formfield\u callback,因为我需要传递self.request.user来过滤查询集中返回的对象


有什么建议吗?

为了将multipleechoice字段限制为指定的查询集,您必须使用工厂。在这种情况下,它将是一个inlineformset_factory_factory,这有点令人困惑,但例如:

以forms.py(或类似格式)的形式

具体地说,我正在考虑一种类似于第一个答案的方法: 但随后将其适当地适配于Inlineformset_工厂


我可以在以后找到时间时进行编辑以添加更多详细信息和说明。

这已得到回答,包括一个使用request.user筛选内联表单字段的示例。@dgel谢谢!我来试一试。@dgel正在使用django 1.3和基于类的视图。我是否仍能以某种方式访问self.request?我现在正在尝试,但以防你提前知道。实际上没有使用基于类的视图。只要创建inlineformset_工厂并将formfield_回调传递给request.user可见的地方,您就应该没事了。错误。。formfield\回调不会在modelForm=\中的自定义字段上执行。也许你能告诉我我是不是疯了?django/forms/models.py->def fields_for_model->第146行
def make_inlineformset_factory(queryset, xmodel):
    """
    Returns an Inlineformset factory for the given queryset . . .
    """
    class My_inlineformset_factory():
        stuff = forms.ModelChoiceField(queryset=queryset)
        class Meta:
            model = xmodel
    return My_inlineformset_factory