Skip to main content
 首页 » 编程设计

python之Django 查询集 : Exclude all row(s) if any one row with same id is excluded

2025年01月19日21www_RR

我正在使用 Django 查询从表中过滤掉一些事务,其中一个事务可能在表中有多个条目。

例如示例表

+---------------+---------+ 
| TransactionId | Status  | 
+---------------+---------+ 
| Txn0          | Pending | 
| Txn0          | Success | 
| Txn1          | Fail    | 
| Txn2          | Pending | 
| Txn3          | Fail    | 
| Txn4          | Pending | 
| Txn4          | Fail    | 
| Txn5          | Pending | 
+---------------+---------+ 

当前查询:

SampleTable.objects.exclude(status='Fail').exclude(status='Success') 

我当前的查询返回 Txn0、Txn2、Txn4、Txn5(因为这些被标记为待处理)。

我需要一个只返回行 Txn2, Txn5(因为所有其他事务至少有一个失败或成功事务)的查询集。

此外,尝试使用 .distinct() 但没有帮助。

请您参考如下方法:

嗯,不是直的。但是,首先过滤所有失败/成功状态的交易(行)。

success_fail_txns = SampleTable.objects.filter(status='Success')  
                       | SampleTable.objects.filter(status='Fail') 
pending_txns = SampleTable.objects.exclude(txnid__in=success_fail_txns)