[英]peewee: Get a single model instead of SelectQuery when back-referencing a foreign key
我在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)
可以使用bob.kid
来访问Bob的孩子,这会给我一个SelectQuery
。 但是,根据设计,我知道任何Parent
只能拥有一个Child
。 然后可以使用bob.kid[0]
访问该子项。
我希望能够通过简单地调用bob.kid
而不是bob.kid[0]
来从Parent
访问Child
。 这可以在不进一步修改Parent
类的情况下实现吗?
您只需添加一个属性即可。
默认情况下,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
约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.