Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask sqlalchemy 使用Flask SQLAlchemy如何在jinja模板助手上检索多对多表额外字段_Flask Sqlalchemy - Fatal编程技术网

Flask sqlalchemy 使用Flask SQLAlchemy如何在jinja模板助手上检索多对多表额外字段

Flask sqlalchemy 使用Flask SQLAlchemy如何在jinja模板助手上检索多对多表额外字段,flask-sqlalchemy,Flask Sqlalchemy,使用Flask SQLAlchemy,我试图使用一个带有附加字段的帮助表来使用多对多关系 模型定义: prodord = db.Table('prodord', db.Column('prod_id', db.Integer, db.ForeignKey('Product.id'), primary_key=True), db.Column('order_id', db.Integer, db.ForeignKey('AOrder.id'), primary_key=True),

使用Flask SQLAlchemy,我试图使用一个带有附加字段的帮助表来使用多对多关系

模型定义:

prodord = db.Table('prodord',
    db.Column('prod_id', db.Integer, db.ForeignKey('Product.id'), primary_key=True),
    db.Column('order_id', db.Integer, db.ForeignKey('AOrder.id'), primary_key=True),
    db.Column('quantity', db.Integer)
)


class Product(db.Model):
    __tablename__ = 'Product'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)


class User(db.Model):
    __tablename__ = 'User'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)


class AOrder(db.Model):
    __tablename__ = 'AOrder'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('User.id'))
    timedate = db.Column(db.String)
    products = db.relationship('Product', secondary=prodord, lazy='subquery',
        backref=db.backref('orders', lazy=True))
调用模板:

@app.route('/orders')
def page_orders():
    all_orders = AOrder.query.all()
    return render_template('orders.html', orders=all_orders)
如何在模板上使用数量值?product.quantity为空,但p.name具有值:

{% for o in orders %}
    <tr>
        <td>{{o.timedate}}</td>
        <td>
            {% for p in o.products %}
                {{p.quantity}} {{p.name}} <br />
            {% endfor %}
        </td>
    </tr>
{% endfor %}
{%o在订单%}
{{o.timedate}}
{o.products%中p的百分比}
{{p.quantity}}{{p.name}}
{%endfor%} {%endfor%}
您已经使用关联表建立了关系,该关联表实质上成为产品和订单模型之间的透明链接

因为您希望在该链接表中存储额外的数据,所以需要将其升级为关联对象,就像其他模型一样

关于如何做到这一点,这里有一个例子:

class Association(Base):
    __tablename__ = 'association'
    left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
    right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
    extra_data = Column(String(50))
    child = relationship("Child", back_populates="parents")
    parent = relationship("Parent", back_populates="children")


class Parent(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    children = relationship("Association", back_populates="parent")


class Child(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    parents = relationship("Association", back_populates="child")