我在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
类吗?
答案 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
约束。