peewee:当 back-referencing 外键时获取单个模型而不是 SelectQuery

peewee: Get a single model instead of SelectQuery when back-referencing a foreign key

我对 peewee 中的 back-referencing 外键有点费劲。 考虑以下代码:

import peewee as pw

db = pw.SqliteDatabase(':memory:')

class Parent(pw.Model):
    name = pw.CharField()

    class Meta:
        database = db


class Child(pw.Model):
    name = pw.CharField()
    parent = pw.ForeignKeyField(Parent, related_name="kid")

    class Meta:
        database = db

db.create_tables([Parent, Child])

bob = Parent.create(name="Bob")
alice = Child.create(name="Alice", parent=bob)

可以使用 bob.kid 访问 Bob 的 children,这会给我一个 SelectQuery。然而,根据设计,我知道任何 Parent 只能有一个 Child。然后可以使用 bob.kid[0].

访问 child

我希望能够通过简单地调用 bob.kid 而不是 bob.kid[0]Parent 访问 Child。如果进一步修改Parent class,这可以实现吗?

您可以只添加一个 属性。

默认反向引用为 0..N,因此最好用 select 查询表示。


示例:

class Parent(pw.Model):
    name = pw.CharField()

    class Meta:
        database = db

    @property
    def kid(self):
        return self.children.get()


class Child(pw.Model):
    name = pw.CharField()
    parent = pw.ForeignKeyField(Parent, related_name="children")

    class Meta:
        database = db

提示:

如果外键确实是一对一的,您可以在外键上添加 UNIQUE 约束。