如何使用带有附加参数的WTForms FormField?

2024-10-02 20:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有带参数资源的形式极限形式

class LimitForm(FlaskForm):
        def __init__(self, resource: Resource, *args, **kwargs):
           super(LimitForm, self).__init__(*args, **kwargs)
           self.period.choices = Period.choices()

我想在其他表单中使用此表单作为通过FormField的field。像一个

^{pr2}$

但此代码引发异常TypeError:\uuInit_Uu()缺少1个必需的位置参数:“resource”

如何将资源从LimitsForm传递到LimitForm?在

谢谢


Tags: self表单参数initdefargs资源resource
1条回答
网友
1楼 · 发布于 2024-10-02 20:33:10

在封闭类的正常初始化之后,您可能会发现执行一些附加逻辑更容易,例如,在结尾用特殊的逻辑实现您自己的LimitsForm.__init__()。否则,您可能不得不将FieldListFormField子类并重写它们的process方法,如果您只需要为一个用例执行一个简单的额外步骤,那么您的生活将变得复杂起来!在

例如,我有一个例子,我想做一些类似于您请求的事情,并通过一个FormField传递一些特殊的kwargs。Flask WTF在默认情况下似乎不会这样做。在本例中,我使用的是一个QuerySelectField,当我调用SQLAlchemy时,我想将一些特殊的过滤器传递给它。在

在我的控制器中,对这个的调用就像

form = CampaignForm(obj=campaign, studio=campaign.studio)

在这里,studio是一个特殊过滤器的一部分,只有在运行时才知道。但是,这个studiokwarg不能通过嵌套的FormField。在

因为我必须在Flask-WTF中扩展并重新布线核心逻辑,以将这个kwarg通过FormField传递到GatingExtraForm,所以我对这个问题的解决方案是这样做:

^{pr2}$

我承认,这有点麻烦,但有时对于很少的用例来说,这是一个合理的权衡。如果这是一个常见的模式,那么你可以深入到扩展瓶WTF。在

相关问题 更多 >