我有一个数据库,在该数据库中,我的父母(公司)与孩子(买方)之间存在一对多的关系。我想遍历每家公司以列出该公司中的所有买家,并在我的html页面中列出他们。
我最初的尝试是尝试companies = Company.query.all()
,然后使用诸如`companies.buyer.firstname之类的东西来访问它,但这会出错
“列表”对象没有属性“买方”
任何帮助将不胜感激。谢谢!
view.py
class ListCompanies(MethodView):
decorators = [login_required]
template_file = 'dashboard.html'
def get(self):
companies = Company.query.all()
print(f'buyer is {companies.buyer.firstname}')
return render_template(self.template_file, companies=companies)
Models.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)
# Child relationship to the Event
event_id = db.Column(db.Integer, db.ForeignKey('events.id'))
password_hash = db.Column(db.String(128))
# Company is parent to the buyer
buyer = db.relationship('Buyers', backref='buyer', lazy='dynamic')
def __init__(
self, email, company, company_url, event_id, password
):
self.email = email
self.company = company
self.company_url = company_url
self.event_id = event_id
self.password_hash = generate_password_hash(password)
# self.user_type = user_type
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def __repr__(self):
return f"{self.company}"
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)
# The buyer is the child to the company
company = db.Column(db.Integer, db.ForeignKey('company.id'))
# The buyer is the parent to the eventdetails
details = db.relationship('Eventdetails', backref='buyer', lazy='dynamic')
def __init__(
self, email, firstname, lastname, company
):
self.email = email
self.firstname = firstname
self.lastname = lastname
self.company = company
def __repr__(self):
return f"Welcome, {self.firstname} {self.lastname}"
答案 0 :(得分:1)
Company.query.all()
返回公司列表。如您所说,您必须遍历这些。如果您想获得名字,同样适用于买家。
为了使您的示例更加容易理解,我将您的示例简化为最低限度。
class Company(db.Model):
__tablename__ = 'companies'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), index=True, nullable=False)
buyers = db.relationship('Buyer', backref='company', lazy='dynamic')
class Buyer(db.Model):
__tablename__ = 'buyers'
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(64), index=True, nullable=False)
lastname = db.Column(db.String(64), index=True, nullable=False)
company_id = db.Column(db.Integer, db.ForeignKey('companies.id'))
class ListCompanies(MethodView):
template_file = 'dashboard.html'
def get(self):
companies = Company.query.all()
return render_template(self.template_file, companies=companies)
<ul>
{% for company in companies %}
<li>
<span>{{ company.name }}</span>
<ul>
{% for buyer in company.buyers %}
<li>{{ buyer.lastname }}, {{ buyer.firstname }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>