gpt4 book ai didi

django - 将自定义表单参数传递给表单集

转载 作者:行者123 更新时间:2023-12-01 00:05:25 27 4
gpt4 key购买 nike

我定义了以下表格

class MyForm(ModelForm):  
def __init__(self, readOnly=False, *args, **kwargs):
super(MyForm,self).__init__(*args,**kwrds)
if readOnly:
Do stuff to make the inputs readonly

当我在 View 中将它实例化为表单时,MyForm 工作得很好 form = MyForm(readOnly=True, instance=ModelA)
但是当我尝试在 inlineformset_factory 中使用它时 Formset = inlineformset_factory(ModelA, ModelB form=MyForm(readOnly=True))我收到错误“NoneType 对象不可调用。”

我认为这是因为表单是在没有模型实例的情况下初始化的
因为 MyForm 正在内联中初始化

我知道问题在于我在内联调用中使用 MyForm 的方式
因为如果我执行以下任一操作,我会收到相同的错误
Formset = inlineformset_factory(ModelA, ModelB form=MyForm(readOnly=True)) Formset = inlineformset_factory(ModelA, ModelB form=MyForm())
但如果我这样做,它会起作用 Formset = inlineformset_factory(ModelA, ModelB form=MyForm)
显然 readOnly 参数默认为 False 并且我的输入没有改变。
有谁知道我如何使用 inlineformset_factory 将 readOnly 参数传递给 MyForm 或者我如何才能实现我想要的?

谢谢
安德鲁

最佳答案

深入挖掘 django.forms.models你可以看到 inlineformset_factory需要一个表单类,而不是一个实例。这就是为什么您的最后一次尝试有效而另一个失败的原因......传入一个实例将不起作用。

这应该给你你正在寻找的东西:

class MyReadOnlyForm(MyForm):

def __init__(self, *args, **kwargs):
super(MyReadOnlyForm,self).__init__(readOnly=True, *args,**kwargs)


Formset = inlineformset_factory(ModelA, ModelB form=MyReadOnlyForm)

如果您需要两个版本
if read_only is True:
form_class = MyReadOnlyForm
else:
form_class = MyForm

Formset = inlineformset_factory(ModelA, ModelB form=form_class)

关于django - 将自定义表单参数传递给表单集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1610892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com