首页 > 解决方案 > 皮威。如何选择所有带有预取字段的外键字段的模型项?

问题描述

我有 3 个模型。

from peewee import (
    PostgresqlDatabase,
    Model,
    CharField,
    ForeignKeyField,
    prefetch,
    JOIN_LEFT_OUTER
)

db = PostgresqlDatabase("***", user='***', password='***')


class Model1(Model):
    name = CharField()

    class Meta:
        database = db


class Model2(Model):
    name = CharField()
    model1 = ForeignKeyField(Model1)

    class Meta:
        database = db


class Model3(Model):
    name = CharField()
    model1 = ForeignKeyField(Model1)

    class Meta:
        database = db


def main():
    model1_prefetched = prefetch(Model1.select(Model1), Model3.select(Model3)).select()
    query = Model2.select(Model2.name, model1_prefetched.c.model1, model1_prefetched.c.model3).join(model1_prefetched, join_type=JOIN_LEFT_OUTER, on=(Model2.model1_id==model1_prefetched.c.id))
    model2_objects = list(query.execute())


if __name__ == '__main__':
    main()

我想从Model2中选择与Model1连接的所有数据,并将所有Model3-objects预取到每个Model1-object。我不明白我该怎么做。

我究竟做错了什么?

谢谢你。

标签: python-3.xpeewee

解决方案


query = Model2.select()
prefetch(query, Model1, Model3)
model3_list = list(query.execute())

推荐阅读