python - formset、inlineformset_Factory 和 kwargs

标签 python django django-forms inline-formset

我有两个模型,我们称它们为模型 A 和模型 B。有一个从 B 到 A 的外键。
即A和B之间的基数为1:n。

我已经为B做了一个对应的ModelForm,叫做MF_B。我在 B 中定义了一个额外的字段。例如

class MF_B(forms.ModelForm):

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

    class Meta:
        model=B

正如上面的代码所暗示的,我想用一个查询集来填充这里的选择。 (我省略了 init() 中我们用来在 stuff 字段上设置查询集的覆盖代码)

交易是我想使用 inlineformset_factory 在一页上创建一个带有 A 的表单和几个带有 B 的表单。

我只想将一堆新的 kwargs 传递给 inlineformset_factory 但它一直提示 意外的关键字参数 在查看 django 中的后端代码之后,我明白了为什么:inlineformset_factory 不接受自定义kwargs。它只需要在方法 sig 中定义的 kwargs。

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_callback 因为我需要传递 self.request.user 来过滤查询集中返回的对象。

有什么建议吗?

最佳答案

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

在 forms.py(或类似文件)中

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

具体来说,我正在考虑一种类似于此处第一个答案的方法:django: How to limit field choices in formset? 然后适本地调整它以适应 Inlineformset_factory。

我可能会在以后有时间的时候编辑以添加更多详细信息和描述。

关于python - formset、inlineformset_Factory 和 kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197479/

相关文章:

python - Django没有这样的列错误

django-ajax-选择应用程序 : How do I create a new object when there isn't already one in the database?

python - 为什么 Django 不允许使用上下文重定向

python - OnKeyDown 事件,键入字符或导航

python - 如果不是 line.startswith - 给出很多单引号和换行括号

python - 如何使用 PySide 快速调整 PNG 大小?

python - Django ManyToMany疑问

python - 如何覆盖 django admin 的默认文件上传行为?

django - 无法弄清楚如何使用通用 UpdateView 呈现 ModelForm

python - 将 JSON 发布到 Flask 会导致 400 Bad Request 错误