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

问题描述 投票:2回答:1

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

我希望能够通过简单地调用Child而不是Parentbob.kid访问bob.kid[0]。这可以在不进一步修改Parent类的情况下实现吗?

python foreign-keys peewee
1个回答
5
投票

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

默认情况下,back-refs是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约束。

© www.soinside.com 2019 - 2024. All rights reserved.