【问题标题】:dynamic form in FlaskFlask 中的动态表单
【发布时间】:2016-11-17 13:09:18
【问题描述】:

在电影评级应用程序中,我想在烧瓶中生成一个具有动态字段数的 WTF 表单。也就是说,如果有三部电影,就会有三个字段。

我想了几个选项,但都没有奏效:

class RatingForm(Form):
    rating = TextField("rating",[validators.Length(min=1, max=1)])
    movie_order=TextField("movie",[validators.Length(min=1, max=1)])
    submit = SubmitField("submit rating")
  1. 将参数传递给表单对象 - 我不知道如何将参数传递给这种类

  2. 在模板内循环,从而生成并返回多个表单,并选择正确的一个。这也不起作用,因为 request.form 是 immutableDict ,我最终有多个字段具有相同的键,我无法访问。

    {% for movie in movies_to_rate %}
      <p>
        <form method="POST" enctype="multipart/form-data" action="/rate">
        {{ movie}}
        {{ forms[movie].rating}}
        {{ forms[movie].submit }}
        <input type="submit" value="Go">
    
    </p>  {% endfor %}
    

关于我能做什么的任何想法?

【问题讨论】:

  • 你可以通过this进行全动态控制,但不知道有没有更好的解决你的问题。
  • @syntonym 谢谢,但我正在寻找与烧瓶更相关的东西......
  • 一个疯狂的猜测,但你能将表单实例列表传递给模板吗?
  • 您是否看过FormFieldFieldList 的组合,例如this question

标签: flask flask-wtforms


【解决方案1】:

我认为您可以生成一个 TextField 列表作为类成员,而不是使用一个字段对象。 (虽然看起来有点奇怪,但我认为您的验证器就是您的意思。)

class RatingForm(Form):
    def __init__(self, count):
        self.ratings = [TextField("rating_" + str(i), [validators.Length(min=1, max=1)])
                   for i in range(count)]
        ...

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多