Python peewee:返回引用外键时,获取单个模型,而不是选择Query

Python peewee:返回引用外键时,获取单个模型,而不是选择Query,python,foreign-keys,peewee,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.Foreig

我在
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
。然而,根据设计,我知道任何
父项
只能有一个
子项
。然后可以使用
bob.kid[0]
访问该子级


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

您只需添加一个属性即可

默认情况下,返回引用是
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

提示:

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

如果外键确实是一对一的,那么可以在外键上添加一个
唯一的
约束。

是的,将属性添加到父项确实是我当前的解决方法。但是,为了简单起见,如果可以的话,我希望避免更改父类。但是我假设没有办法让backref使用
get
而不是
select
?正确,backref总是一个查询对象。好的。这很有道理——我只是希望我错过了一些关于ForeignKey的秘密辩论。感谢您的帮助和关于独特约束的提示!