2

如果我有下表:

class Ticket(BaseModel):
    event = ForeignKeyField(Event)
    category = ForeignKeyField(TicketCategory)
    order_number = IntegerField()
    tier_name = CharField()
    num_available = IntegerField()
   price = DecimalField()

然后我执行以下代码:

tickets = Ticket.select()
for ticket in tickets:

     print ticket.event.id

访问外来对象的主键是否会强制 peewee 启动另一个查询?还是 peewee 足够聪明,可以知道 id 已经可用?

4

2 回答 2

8

几年过去了,但是对于任何偶然发现这个页面的人来说,现在你可以使用 Django 使用的相同语法:<<field_name>>_id 来访问 id。在这种情况下,ticket.event_id。

根据文档

有时您只需要来自外键列的关联主键值。在这种情况下,Peewee 遵循 Django 建立的约定,允许您通过将“_id”附加到外键字段的名称来访问原始外键值:

然而,值得注意的是,这仅在访问查询对象的值时才有效。换句话说,如果你想改变事件ID,只需设置

ticket.event = new_event_id

而不是尝试设置ticket.event_id。

尝试基于外键进行选择时也是如此:

Ticket.select().where(event == desired_event_id)

于 2016-06-15T02:16:59.040 回答
5

它执行另一个查询。为了避免这种情况:

Ticket.select(Ticket, Event).join(Event)

http://peewee.readthedocs.org/en/latest/peewee/querying.html#saving-queries-by-selecting-related-models

于 2014-02-25T19:29:59.190 回答