如果我有下表:
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已经可用了吗?
答案 0 :(得分:5)
执行另一个查询。为了避免这种情况:
Ticket.select(Ticket, Event).join(Event)
答案 1 :(得分:3)
几年之后,但对于偶然发现此页面的其他人来说,现在您可以使用Django使用的相同语法:<< field_name>> _id来访问该ID。在这种情况下,ticket.event_id。
根据docs:
有时您只需要来自外键列的关联主键值。在这种情况下,Peewee遵循Django建立的约定,允许您通过将“_id”附加到外键字段的名称来访问原始外键值:
然而,值得注意的是,这仅在访问查询对象的值时有效。换句话说,如果您想更改事件ID,只需设置
即可ticket.event = new_event_id
而不是尝试设置ticket.event_id。
尝试基于外键选择时也是如此:
Ticket.select()。where(event == desired_event_id)