2013-10-30 15 views
8

Ho un modello con alcuni campi come qui di seguitoOttenere valore minimo nome del campo utilizzando l'aggregazione in Django

class Choclate(models.Model): 
    name = models.CharField(max_length=256) 
    price = models.IntegerField() 

quindi voglio ottenere il nome del campo che ha il valore lowest price, così al fine di ottenere il lowest price valore, si può fare come di seguito utilizzando Aggregations

from django.db.models import Avg, Max, Min 

choclates = Choclate.objects.all() 
lowest_price = choclates.aggregate(Min('price')) 

Così alla fine come ottenere il field name, quella relativa al più basso valore di prezzo in Django?

risposta

8

Si può cercare di seguito il codice per ottenere cosa esatta che si desidera

>>> from django.db.models import Min 
>>> Choclate.objects.filter().values_list('name').annotate(Min('price')).order_by('price')[0] 
(u'First1', 10) 
>>> 

first1 è il nome del campo avendo prezzo = 10, che è il valore più basso.

+0

k grazie è quello che voglio, c'è anche un modo per scoprire che se tutti i valori di prezzo sono uguali, voglio dire se ci sono 4 record di choclate, ho bisogno di controllare se tutti e quattro i record hanno lo stesso valore di prezzo, è è possibile? –

+0

certo, spero che tu abbia trovato il mio commento/dubbio sopra? –

+0

se proverò metto un po 'di condizione if else dopo aver recuperato tutti i 4 record da db .i non ha trovato e query specifiche per questo –

1

Se si passa il Min come argomento posizionale, il nome del campo è price__min. Altrimenti, se lo si passa come argomento della parola chiave, ovvero aggregate(my_min=Min('price')), sarà disponibile con lo stesso nome dell'argomento, in questo caso my_min. Docs

Problemi correlati