【问题标题】:How do I dynamically create forms with Python Flask如何使用 Python Flask 动态创建表单
【发布时间】:2019-05-15 09:40:39
【问题描述】:

我有一个在我的 models.py 文件中定义的大型模型,并且我有为它服务的表单。我是否必须明确说明表单的每个字段,或者有没有办法动态创建它,所以我的代码中没有重复?

forms.py

class CustomerForm(FlaskForm):  # must be a better way

    """ Declarative Form base class responsible for customers
        variable names match customers/models.py and in the corresponding HTML files """

    tpi_name = StringField('Enter Your Name')
    tpi_ref = StringField('Enter Your Email')
    company_name = StringField('Company Name (*)', validators=[InputRequired()])
    company_type = StringField('Company Type')
    company_reg = StringField('Company Registration Number')

和forms.py

class Post(db.Model):  # Must be a better way

    """ Creates the table Post and models the structure of the database table """
    tpi_name = db.Column(db.String(100), nullable=False)
    tpi_ref = db.Column(db.String(100), nullable=False)
    company_name = db.Column(db.String(100), nullable=False)
    company_type = db.Column(db.String(100), nullable=False)
    company_reg = db.Column(db.Integer, nullable=False)

所以这里重复了很多,有没有更好的办法?

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy flask-wtforms


    【解决方案1】:

    我没有亲自尝试过,但遇到了这个:http://flask.pocoo.org/snippets/60/

    如果我正确理解您的问题,这听起来像是在讨论您想要实现的目标。

    【讨论】:

    • 继续并从链接中添加一些对 OP 有帮助的重要点,这样他们就不必遵循链接
    • 重复已经存在的信息是没有用的。指向文档的指针非常合适。
    • 谢谢,唯一的问题是文档已经过时,我似乎无法让它工作
    【解决方案2】:

    也许你喜欢使用 flask-admin 库:https://flask-admin.readthedocs.io/en/latest/

    它是如何工作的? Flask-Admin 背后的基本概念是,它可以让你构建 通过将各个视图分组到类中来实现复杂的界面:每个网页 您在前端看到的,表示已显式添加的类上的方法 到界面。

    这些视图类在绑定到特定数据库时特别有用 模型,因为它们让您可以将所有常用的创建、读取、更新、 将每个模型的 (CRUD) 视图逻辑删除到一个独立的类中。

    例子:

    from flask_admin.contrib.sqla import ModelView
    
    # Flask and Flask-SQLAlchemy initialization here
    
    admin = Admin(app, name='microblog', template_mode='bootstrap3')
    admin.add_view(ModelView(User, db.session))
    admin.add_view(ModelView(Post, db.session))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 2019-12-03
      • 1970-01-01
      • 2011-04-28
      • 2021-05-11
      • 1970-01-01
      • 2021-07-27
      • 2021-02-23
      相关资源
      最近更新 更多