我在我的 Flask 应用程序中使用(优秀的)Python Peewee ORM。我有以下模型(简化):
class User(BaseModel):
name = TextField(null=True)
class UserTransaction(BaseModel):
user = ForeignKeyField(User, related_name='user_transactions')
amount = DecimalField(default=0)
class UserCoTransaction(BaseModel):
user_transaction = ForeignKeyField(UserTransaction, related_name='user_co_transactions')
我现在选择了一个用户如下:
user = User.select().where(User.id == 3).first()
对于这个用户,我想获得所有 user_transactions
,其中没有 user_co_transaction
。我尝试了以下方法:
user.user_transactions.where(UserTransaction.user_co_transactions.count() == 0)
但这给了我一个AttributeError: 'BackrefAccessor' object has no attribute 'count'
。
有人知道我如何为用户获取所有 user_transactions
而没有 user_co_transactions
吗?
最佳答案
我认为这可以解决问题:
(UserTransaction
.select()
.where(UserTransaction.user == user)
.join(UserCoTransaction, JOIN.LEFT_OUTER)
.group_by(UserTransaction)
.having(fn.COUNT(UserCoTransaction.id) == 0))
解释:
你想从join表的count()为0的user transaction表中select,所以我们从user transaction表中select,在cotransaction表上join(使用left outer),过滤聚合结果为排除那些计数为 cotxn != 0 的。
关于python - 如何在 Peewee 中选择二度 BackrefAccessor 的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49119128/