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

dig*_*ngo 3 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)
Run Code Online (Sandbox Code Playgroud)

可以与Bob的孩子接触bob.kid,这可以给我一个机会SelectQuery。但是,根据设计,我知道任何一个Parent都只能有一个Child。然后可以使用访问该孩子bob.kid[0]

我希望能够通过简单地调用而不是Child从a 访问。无需进一步修改类就可以实现吗?Parentbob.kidbob.kid[0]Parent

col*_*fer 5

您可以只添加一个属性。

默认情况下,后向引用是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
Run Code Online (Sandbox Code Playgroud)

小费:

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