Django queryset:如果排除具有相同id的任何一行,则排除所有行

2024-10-03 04:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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')

我当前的查询返回Txn0Txn2Txn4Txn5(因为它们被标记为挂起)。你知道吗

我需要一个只返回行Txn2Txn5(因为所有其他事务至少有一个失败或成功事务)的queryset。你知道吗

另外,尝试使用.distinct(),但没有帮助。你知道吗


Tags: djangostatus样品条目事务excludesuccessfail
2条回答

您可以在条件中使用排除

SampleTable.objects.exclude(status__in=['Fail','Success'])

好吧,不是直接的。但是,首先过滤所有状态为失败/成功的事务(行)。你知道吗

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

相关问题 更多 >