投射到听写时保持外键关系

Maintaining foreign key relations when casting to dict

假设我有以下数据库 类:

class Person(DB.Entity):
  id = PrimaryKey(int, auto=True)
  name = Required(str, 100)
  cars = Set('Car')
class Car(DB.Entity):
  id = PrimaryKey(int, auto=True)
  owner = Required(Person, cascade_delete=False)

当我对 Person 执行 select 时,我得到关联的汽车:

people = Person.select(lambda p: p.name == 'Jaewon')

不过,我想 return people 作为一个 Dict 而不是一个 Pony 对象,这样它就可以在调用方法中使用。如果我执行以下操作,我会得到 people 作为字典,但会丢失 car 键:

return people[:]

从数据库中提取值并将其作为字典 return 而不删除其关联值的正确方法是什么?

Entity.to_dict 函数有一个 related_objects 关键字参数。

您可以使用它在字典中包含对象。

如果你也想要一对多关系,你还需要 with_collections 参数。

people = Person.select(lambda p: p.name == 'Jaewon')

people = [
  person.to_dict(
    related_objects=True,
    with_collections=True
  )
  for person in people
]

这不会自动递归,您必须自己遍历树才能创建完整的字典。

for person in people:
  person['cars'] = [car.to_dict(**kwargs) for car in person['cars']]