使用SQLAlchemy和Flask访问HTML中的backref参数时出现问题



我有一个HTML页面(下面简化(,我试图使用backref访问一些表数据。HTML{% for buyer in company.buyer%} {% if buyer is none %}引用公司表的backrefbuyer,使我可以访问买家表格。

从那里,我想使用Buyer表中的backref(edetails(来获取Eventdetails表格中的信息。

当我尝试访问Eventdetails表的信息时,这不起作用。{{ buyer.edetails.naics}}无信息填充。有可能同时使用两种不同的背景反射吗?非常感谢。

company.html|简化以便于阅读

<div class="container">
{% for buyer in company.buyer%} {% if buyer is none %}
<div class="row">
<div class="col-sm">
No company has been added.
</div>
</div>
{% else %}
<!--This is where I start the internal table-->
<div class="container border bg-light">
<div class="row">
<div class="col-sm">
{{buyer.firstname}} {{buyer.lastname}}
</div>
<div class="col-sm">
<!--THIS CODE DOESN'T POPULATE ANY INFORMATION-->
<p> {{ buyer.edetails.naics}}</p>
</div>
</div>
</div>
{% endif %} {% endfor %}
</div>

视图.py

class CompanyView(MethodView):
decorators = [login_required]
template_file = 'company.html'
def get(self, comp_id, event_id):
company = Company.query.filter_by(id=comp_id).first()
print(f'The company is {company.company}')
events = Events.query.filter_by(id=event_id).first()
print(f'The event is {events.eventname}')
return render_template(self.template_file, company=company, events=events)

型号如下所示

型号.py

Class Company(db.Model, UserMixin):
__tablename__ = 'company'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True, nullable=False)
company = db.Column(db.String(64), index=True, nullable=False)
company_url = db.Column(db.String(64), index=True, nullable=False)
duns = db.Column(db.String(11))
event_id = db.relationship(
'Events', secondary=event_company, backref='event', lazy='dynamic'
)
password_hash = db.Column(db.String(128))
# Company is parent to the buyer
buyer = db.relationship('Buyers', backref='buyer', lazy='dynamic')

class Buyers(db.Model, UserMixin):
__tablename__ = 'buyers'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True, nullable=False)
firstname = db.Column(db.String(64), index=True, nullable=False)
lastname = db.Column(db.String(64), index=True, nullable=False)
company = db.Column(db.Integer, db.ForeignKey('company.id'))
edetails = db.relationship('Eventdetails', backref='edetails', lazy='dynamic')
schedule = db.relationship('Buyerschedule', backref='schedule', lazy='dynamic')
class Eventdetails(db.Model):
__tablename__ = 'eventdetails'
id = db.Column(db.Integer, primary_key=True)
schedule_name = db.Column(db.String(64), unique=True, index=True)
events_id = db.Column(db.Integer, db.ForeignKey('events.id'))
buyer_id = db.Column(db.Integer, db.ForeignKey('buyers.id'))
naics = db.Column(db.Integer)
buyer_schedule_id = db.relationship(
'Buyerschedule', backref='buyer_sched_id', lazy='dynamic')

如果您对buyer.edetails.naics感兴趣,则不需要使用backrefs。这只是买家与Eventdetails的关系。

按照目前的设置方式,buyer.edetails将返回一个列表。因此,如果您尝试访问buyer.edetails.naics,可能会出现错误

如果买家和活动细节之间确实存在一对一的关系,那么您可以配置这种关系:

class Buyers(db.Model, UserMixin):
...
edetails = db.relationship('Eventdetails', backref='edetails', lazy='dynamic', uselist=False)

您可能还必须指定eventdetails.buyer_id列是唯一的。

最新更新