SQLAlchemy 一对多关系 - 如何正确获取 'many' 集合

SQLAlchemy one-to-many relationship - how to properly get the 'many' collection

我不确定我是否正确理解如何获取一对多关系的集合部分。

class ProjectReport(db.Model):
    __tablename__ = "project_reports"

    id = db.Column(UUID, primary_key=True, default=uuid.uuid4)
    project_id = db.Column(UUID, db.ForeignKey("projects.id"), nullable=False)
    entries = db.relationship("ProducerEntry", backref="project_report", lazy="dynamic")

class ProducerEntry(Entry):
    __tablename__ = "producer_entries"
    __mapper_args__ = {"polymorphic_identity": "Entry"}

    id = db.Column(UUID, db.ForeignKey("entries.id"), primary_key=True)
    project_id = db.Column(UUID, db.ForeignKey("projects.id"), nullable=False)
    project_report_id = db.Column(UUID, db.ForeignKey("project_reports.id"), nullable=True)

我的问题是我不能只访问 entries 字段。

for entry in self.entries:
    do_something(entry)

这个returnsNotImplementedError

我设法通过 hybrid property 获取了数据,但这似乎有点矫枉过正,因为已经有了关系,而且以后的进一步逻辑会变得有点复杂。

@hybrid_property
def entries(self):
    return ProducerEntry.query.filter_by(project_report_id=self.id)

Ab 附加信息是 ProjectReport 基本上是 EntryProject 模型的公共列,而 project_report_id 可以为空,因为条目和首先生成项目,然后我可以从中生成项目报告。这就是我创建报告的方式:

...
project_report = ProjectReport(date_order=entry.date_order, project_id=entry.project.id)
project_report.entries.append(entry)
...

据我所知,在此之后我不必将 project_report_id 添加到制作人 entry

我在这里错过了什么?

是的,那个关系字段 returns 是一个查询,所以我应该调用:

self.entries.all()

或任何其他正在处理查询的东西。