2010-09-09 8 views
7

Ho un database che contiene record con diversi campi contenenti alcune informazioni.Domanda di Django all'elenco

per avere tutti i dati della tabella di corrispondenza qualche filtro farei questo:

records = Record.objects.filter(fieldA='a') 

record, suppongo, è un oggetto QuerySet e contiene una "lista" dei record. È corretto?

Ora diciamo che voglio un elenco dei valori in un campo.

Se faccio questo:

records = Record.objects.filter(fieldA='a').only('fieldB') 

ho ancora ottenere un set di query, ma ora ha alcuni campi differite. Quello che voglio è solo una lista dei valori che intendevo prendere alias campo B. Voglio anche essere in grado di afferrare i valori distinti del campo B. Suppongo che potrei solo scorrere su ogni disco, estrarre il campo B, aggiungerlo a un elenco se non è già lì, ed eccolo lì, ma deve esserci un modo migliore.

Grazie!

EDIT: Penso che quello che sto cercando è

Record.objects.values_list('fieldB') 
+0

http://stackoverflow.com/questions/4424435/how-to-convert-a-django-queryset-to-a-list – Wtower

risposta

10

Yup, l'ho trovato. http://docs.djangoproject.com/en/dev/ref/models/querysets/ Ecco il riferimento

+5

che produce una lista di tuple 1-valore '(('a ',), (' b ',), (' c ',)) ', che probabilmente non è quello che vuoi. Se si passa flat = True a values_list ('Record.objects.values_list ('fieldB', flat = True)') si ottiene una lista piatta '('a', 'b', 'c')'. –

4

Sto postando il commento di James qui per renderlo più prominente. Era certamente quello che stavo cercando.

Volevo un elenco di valori. L'utilizzo del metodo .list_values() ha restituito un elenco di tuple. Per ottenere un elenco di valori, avevo bisogno dell'opzione flat=True.

Record.objects.values_list('fieldB', flat=True)