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())
В конце концов, я хочу список отправленных транспортных средств. Транспортное средство отправляется, если оно является частью отправленной партии. Отгрузка завершена, если у нее есть принятая ставка.Есть ли способ упростить этот запрос Django?
Я бы предпочел не перебирать запросы, тем самым вызывая попадание в БД до его необходимости ... не существует способа, например, получить все связанные с ним отправления из списка ставок?
Вот урезана версия моих моделей:
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')
Извините, у вас достаточно информации. Проблема с тем, что вы предлагаете, заключается в том, что «ставка» является множественной (у партии может быть много ставок), поэтому я не думаю, что вы можете ее фильтровать таким образом? – mpen
Значит, вы говорите, что * все * ставки для отправки должны быть приняты? –
Нет ... совсем нет. Можно принять только одну заявку. Но 'shipment__bid__status' - это не вещь. Это будет 'shipment__bids__status' ... как это будет работать? Вам нужно найти транспортные средства, которые относятся к отгрузкам с принятой ставкой ... «Множество ставок» (но только одна принятая) вещь усложняет это. – mpen