Peewee. Как выбрать все элементы модели с присоединенным полем внешней клавиши с предварительно выбранным полем? - PullRequest
0 голосов
/ 24 января 2020

У меня есть 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-объекты на каждый Model1-объект . Я не понимаю, как я могу это сделать.

Что я делаю не так?

Спасибо.

1 Ответ

0 голосов
/ 24 января 2020
query = Model2.select()
prefetch(query, Model1, Model3)
model3_list = list(query.execute())
...