假设我们有这三种模式。
class Item(BaseModel):
title = CharField()
class User(BaseModel):
name = CharField()
class UserAnswer(BaseModel):
user = ForeignKeyField(User, 'user_answers')
item = ForeignKeyField(Item, 'user_answers_items')
answer = ForeignKeyField(Item, 'user_answers')
我想获取当前用户没有相关Items
记录的所有UserAnswer
。在SQL中它将是这样的:
select * from item i
left join useranswer ua on ua.item_id=i.id and ua.user_id=1
where ua.id is null;
是否可以使用peewee语法在两个字段上使用约束进行左外连接?如果我能以这种方式做到这一点会很酷:
Item.select().join(UserAnswer, JOIN_LEFT_OUTER, on=['__my_constraints_here__']).where(
(UserAnswer.id.is_null(True))
)
答案 0 :(得分:5)
是的,您可以加入多个条件:
join_cond = (
(UserAnswer.item == Item) &
(UserAnswer.user == 1))
query = (Item
.select()
.join(
UserAnswer,
JOIN_LEFT_OUTER,
on=join_cond))
.where(UserAnswer.id.is_null(True)))
文档:http://docs.peewee-orm.com/en/latest/peewee/api.html#Query.join
很抱歉没有使用多个连接条件的示例,但on
只是一个任意表达式,因此您可以将任何有效的peewee“Expression”放在那里。