有没有办法简化这个Django查询?

有没有办法简化这个Django查询?,django,django-models,Django,Django Models,最后,我想要一份已装运车辆的清单。如果车辆是已完成装运的一部分,则车辆已装运。如果已接受投标,则装运已完成 我不希望迭代查询集,从而在需要之前强制对DB进行命中。。。例如,是否有一种方法可以从投标列表中获取所有相关装运 以下是我的模型的精简版本: accepted_bids = Bid.objects.filter(shipment__user=u, status='acc').select_related('shipment') completed_shipments = [] for b

最后,我想要一份已装运车辆的清单。如果车辆是已完成装运的一部分,则车辆已装运。如果已接受投标,则装运已完成

我不希望迭代查询集,从而在需要之前强制对DB进行命中。。。例如,是否有一种方法可以从投标列表中获取所有相关装运


以下是我的模型的精简版本:

accepted_bids = Bid.objects.filter(shipment__user=u, status='acc').select_related('shipment')
completed_shipments = []
for b in accepted_bids:
    completed_shipments.append(b.shipment)
vehicles_shipped = []
for s in completed_shipments:
    vehicles_shipped.extend(s.items.all())

提供模式很重要。但这里有一个猜测:

class Shipment(Model):
    user = ForeignKey(User, related_name='shipments')

class ShipmentItem(models.Model):
    shipment = ForeignKey(Shipment, related_name='items')

    class Meta:
    abstract = True

class VehicleItem(ShipmentItem):
    pass

class Bid(Model):
    user = ForeignKey(User, related_name='bids')
    shipment = ForeignKey(Shipment, related_name='bids')

对不起,我以为你有足够的信息。你建议的问题是“出价”是复数形式(一批货可以有很多出价),所以我不认为你可以这样过滤它?所以你是说一批货的所有出价都需要接受?不……一点也不。只能接受一个投标。但是
shipping\u bid\u status
不是一件事。它将是
装运\uuuuu投标\uuuu状态
。。。那怎么办?您需要找到属于已接受投标的装运的车辆。。。“许多出价”(但只有一个被接受的出价)使这一点变得复杂。正如所写的,只是您需要稍微更改参数名。Django的ORM镜像了SQL,所以就像SQL中加入被接受的投标一样,将发现任何至少有一个.Hrm。。。我真的不认为那会起作用。我的理由是,在大多数语言中,像“user.name”这样的东西是有意义的,但是当你有一个用户列表时,“users.name”就没有意义了。但我想在这个场景中会有点不同…非常酷!
Vehicle.objects.filter(shipment__bid__status='acc', shipment__user=u)