我在名为User
的{{1}}和Paper
之间设置了多对多关系。我还在paperauthors
和Review
之间设置了一对多关系。
我无法弄清楚如何加入Paper
和Paper
表格而不会失去使用Review
获取作者列表的能力。
这是我的模特
Paper.authors
首先我尝试了:
paperauthors = db.Table('paperauthors',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('paper_id', db.Integer, db.ForeignKey('papers.id'))
)
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(64))
last_name = db.Column(db.String(64))
email = db.Column(db.String(64), unique=True, index=True)
class Paper(db.Model):
__tablename__ = 'papers'
id = db.Column(db.Integer, primary_key=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
title = db.Column(db.Text)
abstract = db.Column(db.Text)
authors = db.relationship("User",
secondary=paperauthors,
backref="papers")
class Review(db.Model):
__tablename__ = 'reviews'
id = db.Column(db.Integer, primary_key=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
paper = db.Column(db.Integer, db.ForeignKey('papers.id'))
reviewer = db.Column(db.Integer, db.ForeignKey('users.id'))
evaluation = db.Column(db.Integer)
但是allReviews = Review.query.join(Paper).add_columns(Paper.title, Paper.authors,
Review.timestamp, Review.reviewer,
Review.evaluation).all()
字段是一个bool。我猜这是因为我在数据库行和列的上下文中操作,而不是python .authors
模型。
我也尝试过:
Paper
这种方式允许我访问allReviews = Paper.query.outerjoin(Review, Review.paper == Paper.id).all()
方法,但由于我在Paper.authors
python模型的上下文中操作,我无法访问审阅者和评估的Paper
字段
如何从两个表中获取数据,包括多对多数据?