2010-09-09 16 views
7

Tengo una base de datos que tiene registros con varios campos que contienen cierta información.Consulta Django a la lista

para obtener todos los datos de la tabla coinciden con alguna de filtro que haría esto:

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

registros, supongo, es un objeto de QuerySet y contiene una "lista" de los registros. ¿Es eso correcto?

Ahora digamos que quiero una lista de los valores en un campo.

Si hago esto:

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

todavía obtener un conjunto de consultas, pero ahora tiene algunos campos diferidos. Lo que quiero es solo una lista de los valores que quería captar alias fieldB. También quiero ser capaz de captar los distintos valores de fieldB. Supongo que podría simplemente iterar sobre cada registro, extraer el campo B, agregarlo a una lista si aún no está allí, y ahí está, pero debe haber una manera mejor.

Gracias!

EDIT: Creo que lo que estoy buscando es

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

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

Respuesta

10

Sí, lo encontraron. http://docs.djangoproject.com/en/dev/ref/models/querysets/ Aquí está la referencia

+5

que produce una lista de tuplas de valor 1 '(('una ',), (' b ',), (' c ',)) ', que probablemente no es lo que quieres. Si pasa flat = True a values_list ('Record.objects.values_list ('fieldB', flat = True)') obtendrá una lista plana '('a', 'b', 'c')'. –

4

Estoy publicando el comentario por James aquí para hacerlo más prominente. Ciertamente era lo que estaba buscando.

Yo quería una lista de valores. Utilizando el método QuerySet.list_values() devolvió una lista de tuplas. Para obtener una lista de valores, necesitaba la opción flat=True.

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