2010-10-28 24 views
24

Ho una domanda ...Come aggiungere un'annotazione su elementi distinti?

packages = Package.objects.annotate(bid_count=Count('items__bids')) 

che dovrebbe darmi una lista dei pacchetti con il numero di offerte ciascuna. Funziona benissimo se c'è solo un articolo nel pacchetto, ma se c'è di più, il doppio conta.

Ogni confezione è composta da 1 o più articoli. Ogni offerta viene inserita in uno o più articoli all'interno di un pacchetto. Voglio recuperare il numero di offerte piazzate sugli articoli all'interno di quel pacchetto.

Se c'è 1 offerta fatta il 2 elementi all'interno di un pacchetto, attualmente questo conta come 2, lo voglio per tornare 1.

ho provato Count('items__bids__distinct') ma che non ha funzionato. Come posso fare questo?

+0

Eventuali duplicati di [Django annotare conteggio con un campo distinto] (http://stackoverflow.com/questions/13145254/django- annotate-count-with-a-distinct-field) –

risposta

72

Ho avuto lo stesso problema e ho trovato la risoluzione qui: http://www.djangofoo.com/182/filter-annotate-count

packages = Package.objects.annotate(bid_count=Count('items__bids', distinct = True)) 
+5

C'è un argomento 'distinto' ?! Ho dimenticato da tempo cosa stavo cercando di fare con questa domanda, penso che il progetto sia stato abbandonato ... ma se mai dovesse succedere di nuovo! Questo sarà utile. Grazie! – mpen

+8

Vorrei poterti dare +1000 punti. Nessuno su IRC ha avuto la minima idea di come rispondere a questa domanda, questi kwargs sembrano completamente privi di documenti e l'unico modo per scoprire che esistono è dal codice sorgente. – John

+0

Ho passato un'ora a provare diverse soluzioni possibili per questo! Ho controllato la definizione Aggregate in 'django.db.models.aggregates.py' e ho visto la firma' __init __ (self, lookup, ** extra) ', ma poi non sono riuscito a trovare alcun documento su come usare quegli argomenti extra denominati e naturalmente questa è la risposta! Perché diavolo non è documentato !? – AJJ

Problemi correlati