Python formset、inlineformset_工厂和kwargs
我有两种型号,我们称它们为a型和B型。B中有a的外键。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之间的基数是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