peewee:在反向引用外键时获取单个模型而不是SelectQuery

时间:2015-06-24 22:33:52

标签: python foreign-keys peewee

我在peewee中反向引用外键时遇到了一些麻烦。 请考虑以下代码:

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的孩子,这会给我一个SelectQuery。但是,根据设计,我知道任何Parent只能有一个Child。然后可以使用bob.kid[0]来访问该孩子。

我希望只需拨打Child而不是Parent即可通过bob.kid访问bob.kid[0]。这可以通过实现而不是进一步修改Parent类吗?

1 个答案:

答案 0 :(得分:4)

您只需添加一个属性即可。

默认情况下,back-refs为0..N,因此最好由选择查询表示。

示例:

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约束。