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

时间:2018-04-04 16:40:21

标签: python django django-queryset

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

E.g。样本表

     protected void RadSiteMap1_NodeDataBound(object sender, RadSiteMapNodeEventArgs e)
        {
            DataRowView nodeData = e.Node.DataItem as DataRowView;
            e.Node.ToolTip = nodeData["NodeName"].ToString();
}

当前查询:

+---------------+---------+
| 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') Txn0Txn2Txn4(因为这些标记为待定)。

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

此外,尝试使用Txn5,但没有帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以使用排除条件

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