2010-05-21 3 views
0
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') 

ответ

1

Поставляя схемы имеет важное значение. Но вот догадка:

Vehicle.objects.filter(shipment__bid__status='acc', shipment__user=u) 
+0

Извините, у вас достаточно информации. Проблема с тем, что вы предлагаете, заключается в том, что «ставка» является множественной (у партии может быть много ставок), поэтому я не думаю, что вы можете ее фильтровать таким образом? – mpen

+0

Значит, вы говорите, что * все * ставки для отправки должны быть приняты? –

+0

Нет ... совсем нет. Можно принять только одну заявку. Но 'shipment__bid__status' - это не вещь. Это будет 'shipment__bids__status' ... как это будет работать? Вам нужно найти транспортные средства, которые относятся к отгрузкам с принятой ставкой ... «Множество ставок» (но только одна принятая) вещь усложняет это. – mpen

Смежные вопросы