1

我有一堆 Order 对象,每个对象都连接到一个或多个 OrderRow 对象(通过 Order.order_rows.all() 作为与其父 Orders 的反向关系可见)。

每个 OrderRow 都有一个collection_status属性,可以是 'collected'、'uncollected' 或一堆其他特殊值。每个订单都有一个状态属性,其中一个有效值是“处理中”。

我在尝试构建一个列出具有以下条件的 Order 对象的 Order QuerySet 时不知所措:订单状态为“处理中”,其collection_status='collected'OrderRows 的计数小于其 OrderRows 的总数。即完全未收集或部分收集但未完全收集的订单。

明确地说:

两行订单,均“未收集”:包含在 QS
订单中,包含三行,一个“已收集”,两个“未收集”:包含在 QS
订单中,两行均“已收集”:未包含在 QS 中!

(您可以将 'uncollected' 替换为任何其他不是 'collected' 的值,并且条件仍然相同;它是 'collected' 与任何其他 collection_status)

我已经做到了 Order.objects.filter(status__exact='processing'),但除此之外,我在注释、Q() 对象等方面的所有尝试都失败了。

4

1 回答 1

0

我至少重读了你的问题 30 遍。让我看看我是否明白你需要什么。

这不起作用,因为任何带有 OrderRow.collection_status=='collected' 的订单都将被排除在外

Order.objects.filter(status='processing').exclude(order_row__collection_status='collected')

让我们试试别的

orders=Order.objects.filter(status='processing')
arr=[]
for order in orders:
  col=order.order_rows.filter(collection_status='collected')
  if col.count() < order.order_rows.all().count():
    arr.append(order.pk)

orders=orders.filter(pk__in=arr)

只是为了澄清

其 collection_status='collected' OrderRows 的计数小于其 OrderRows 的总计数

在第 31 次阅读您的问题后,任何订单可能拥有的 OrderRows 总数似乎总是 >=“收集的”OrderRows 的数量

是否应该包含 29 行、14 行已收集和 15 行其他的订单?一个有 29 行、15 行收集和 14 行其他的订单呢?

于 2009-12-13T20:51:32.130 回答