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的秘密辩论。感谢您的帮助和关于独特约束的提示!