【问题标题】:Django queryset: Exclude all row(s) if any one row with same id is excludedDjango查询集:如果排除任何具有相同ID的行,则排除所有行
【发布时间】:2018-09-14 07:45:30
【问题描述】:

我正在使用 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 的查询集(因为所有其他事务至少有一个失败或成功事务)。

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

【问题讨论】:

标签: python django django-queryset


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用 exclude with in 条件

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

    【讨论】:

    • 你需要'围绕成功:)
    • 虽然这样说是对的,但是并不能解决OP的问题。即 - 它会给出与他上面发布的代码相同的结果。
    • 同意@MrName。发布的这个解决方案类似于我正在使用的查询。
    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多