我有一堆Order对象,每个对象都连接到一个或多个OrderRow对象(与Order.order_rows.all()的父订单反向关联。)
每个OrderRow都有一个 collection_status 属性,可以“收集”,“取消收集”或一堆其他特殊值。每个订单都有一个状态属性,其中一个有效值是'处理'。
我无法尝试构建一个Order QuerySet,它列出了具有以下条件的Order对象:订单状态为'processing',其collection_status='collected'
OrderRows的计数小于其OrderRows的总计数。没有收集或部分收集但未完全收集的订单,即。
以明确的方式表达:
两行订单,均为'未收集':包含在QS中 订单有三行,一行'收集',两行'未收集':包括在QS中 订单有两行,都是'收集':未包含在QS中!
(您可以将'未收集的'替换为任何其他未收集的值且标准仍然相同;它'收集'与任何其他collection_status相比)
我已经达到了Order.objects.filter(status__exact ='processing'),但除此之外,我对注释,Q()对象等的所有尝试都失败了。
答案 0 :(得分:0)
我重读了你的问题至少30次。让我看看我是否理解你需要的东西。
这不起作用,因为任何带有OrderRow.collection_status =='collect'的订单都会被排除
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 ='已收集'的计数OrderRows小于其OrderRows的总数
在第31次阅读您的问题之后,任何订单可能拥有的OrderRows总数似乎总是> ='收集'OrderRows的数量
是否应该包含29行,14行和15个其他订单? 29行,15集和其他14个订单怎么样?