如何创建包含Flask中多个实体的窗体?

2024-09-30 16:41:45 发布

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

所以,我希望我的问题是相关的,符合规则。你知道吗

我正在试用python微框架烧瓶;到目前为止,还不错。给定如下2个实体(一个Truc到多个Truc属性):

特鲁克:

from app import db
from sqlalchemy.orm import relationship
from sqlalchemy import Table, Column, Integer, ForeignKey
import TrucAttribute

class Truc(db.Model):
    __tablename__ = 'app_truc'
    id = db.Column(db.Integer, prymary_key = True)
    owned_attributs_de_truc = db.relationship('TrucAttribute', backref="truc", cascade="all, delete-orphan", lazy="dynamic")

# Truc business methods ...

属性:

from app import db
from sqlalchemy.orm import relationship
from sqlalchemy import Table, Column, Integer, ForeignKey
import Truc

class TrucAttribute(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    truc_id = db.Column(db.Integer, db.ForeignKey('app_truc.id'))
    truc_owner = relationship("Truc", backref="attributs_de_truc")

    @staticmethod #return a list usable for forms
    def form_list():
        attributs = TrucAttributes.query.all()
        attributs_list = []
        for attribut in attributs:
        attributs_list.append((unicode(attribut.id), unicode(attribut.name))
        return attributs_list

你知道吗表单.py地址:

from flask_wtf import Form
from wtforms import SelectField
from app.models.trucAttributes import TrucAttribute

class CreateTrucForm(Form):
    truc_attribute = SelectField(u'Truc Attribute', choices=TrucAttribute.form_list())

代码来自创建.html地址:

Truc Attribute :
{{  form.truc_attribute() }}

以及控制器:

@app.route('/create/truc', methods=['GET', 'POST'])
def createTruc():
    form = CreateTrucForm()
    return render_template('create/CreateTruc.html', form=form)

如何使用Truc属性的select列表创建Truc创建表单?到目前为止,我只基于Flask Mega Tutorial创建了非常简单的表单。你知道吗

谢谢!你知道吗


Tags: fromimportformidappdbsqlalchemycolumn
1条回答
网友
1楼 · 发布于 2024-09-30 16:41:45

你的静态方法应该很好。我唯一不确定的是这个解决方案的动态性。如果您最终从属性中添加或删除,它会更新吗?如果它只在启动时被查询,它可能不会。我做的有点不同,在我的生活中使用应用程序路径函数,然后调用render\u模板。那么就不需要定义choices=。。。在你们班上。你知道吗

form.truc_attribute.choices = [(a.id,a.name) for a in Session.query(TrucAttribute).\
                               order_by(TrucAttribute.a_name).all()]
render_template(.....)

但是静态方法应该可以很好地工作。我喜欢按字母顺序排列我的选择,并使用order\ U by来完成。你知道吗

另一个提示。如果希望表单返回相应的id整数,而不是用户选择的字符串,从而简化查询,可以在表单类中设置:

class CreateTrucForm(Form):
    truc_attribute = SelectField("Attribute", coerce=int)

然后像我刚才描述的那样填充列表,当您在post请求之后解析表单时,应该会得到intergers。你知道吗

希望这有帮助。你知道吗

汉努

相关问题 更多 >