繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM