2010-11-26 23 views
0

J'ai une requête,Comment faire une requête pour le compte?

Bid.objects.filter(shipment=shipment, status=BidStatuses.ACCEPTED, user=request.user, items__count=0).exists()  

La partie qui ne fonctionne pas est items__count=0. Les enchères ont une relation plusieurs-à-plusieurs avec les éléments. J'ai besoin de vérifier si cette offre a 0 articles. Comment puis je faire ça?

Répondre

2

Agrégation.

http://docs.djangoproject.com/en/1.2/topics/db/aggregation/

voir la doc sur, lisez l'échantillon, vous trouverez la réponse

+0

'Book.objects.annotate (num_authors = Count ('authors')). Filter (num_authors__gt = 1)'. Je n'ai pas pensé à annoter et ensuite filtrer dans la même requête pour une raison quelconque ... en utilisant annoter partout ailleurs. – mpen

1

Pour l'enregistrement (il y a déjà une réponse acceptée avec un lien vers docs d'agrégation Django), ce OP a besoin est :

Bid.objects.annotate(item_num=models.Count('items')).filter(shipment=shipment, status=BidStatuses.ACCEPTED, user=request.user, item_num=0).exists() 
+0

Je mets 2 et 2 ensemble, mais merci d'avoir fait le mille supplémentaire et l'épeler de toute façon :) – mpen