Peewee jointure 不是 return 所有选定的字段

Peewee jointure not return all selected fields

我在使用 peewee 库时遇到了一些问题。我在 python 应用程序后面使用 sqlite 数据库并结合 peewee 来访问数据库,在我的一个函数中,我根据函数的输入参数检索数据,它看起来像这样:

def display_characters(self, menu_update: PageView123, emoji: Emoji = None):
        # Characters retrieving
        query = Character.select(Character, fn.Count(Character.id).alias('count'), CharactersOwnership.discord_user_id)
        museum_filter = menu_update.retrieve_hidden_data()
        if museum_filter.category is not None:
            query = query.where(Character.category == museum_filter.category)
        if museum_filter.rarity is not None:
            query = query.where(Character.rarity == museum_filter.rarity)
        if museum_filter.affiliation is not None:
            query = (query.join(CharacterAffiliation)
                     .join(Affiliation)
                     .where(Affiliation.name == museum_filter.affiliation))
        total_characters = query.count()

        # Then we filter on only the owned card
        query = (query.join(CharactersOwnership, on=(CharactersOwnership.character_id == Character.id))
                      .where(CharactersOwnership.discord_user_id == museum_filter.owner.id)
                      .group_by(Character.id)
                      .order_by(Character.name))

        total_owned = query.count()

代码本身没什么好说的,但问题是当我到达最后一步时,当我们进入条件if museum_filter.affiliation is not None:时检索到的模型并不完整。 为了描述我的问题,它看起来像这样:

知道查询产生的模型为什么不完整吗?

谢谢!

您可能希望明确调用 .join_from() 指定源和目标 table,因为 peewee 的“连接上下文”可能会伤害您而不是帮助您。文档在这里:http://docs.peewee-orm.com/en/latest/peewee/relationships.html#joining-multiple-tables

或者,在附属块结束时调用 .switch(Character) 将连接上下文重置为字符。此外,您需要明确 select() 所有要检索的列。加入额外的 table 并不意味着从中选择数据