2010-09-09 8 views
7

Ich habe eine Datenbank, die Datensätze mit mehreren Feldern enthält einige Informationen.Django Abfrage zu Liste

Um alle Daten in der Tabelle bekommen einige Filter entsprechen ich dies tun würde:

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

Aufzeichnungen, nehme ich an, ist ein QuerySet Objekt und enthält eine „Liste“ von Datensätzen. Ist das korrekt?

Jetzt sagen wir, ich möchte eine Liste der Werte in einem Feld.

Wenn ich dies tun:

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

Ich bekomme immer noch eine queryset, aber jetzt hat es einige latente Felder aus. Was ich will, ist nur eine Liste der Werte, die ich aka fieldB holen wollte. Ich möchte auch in der Lage sein, die verschiedenen Werte von fieldB zu erfassen. Ich nehme an, ich könnte einfach über jeden Datensatz iterieren, Feld B herausziehen, es zu einer Liste hinzufügen, wenn es nicht schon da ist, und da ist es, aber es muss einen besseren Weg geben.

Danke!

EDIT: Ich denke, was ich suche

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

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

Antwort

10

Yup, ist es gefunden. http://docs.djangoproject.com/en/dev/ref/models/querysets/ Hier ist die Referenz

+5

, die eine Liste von 1-Wertetupeln erzeugt '(('a ',), (' b ',), (' c ',)) ', was wahrscheinlich nicht das ist, was Sie wollen. Wenn Sie flat = True an values_list ('Record.objects.values_list ('fieldB', flat = True)') übergeben, erhalten Sie eine flache Liste '('a', 'b', 'c')'. –

4

Ich poste den Kommentar von James hier, um es prominenter zu machen. Es war sicherlich das, wonach ich suchte.

Ich wollte eine Liste von Werten. Unter Verwendung der QuerySet Methode .list_values() ergab eine Liste von Tupeln. Um eine Liste von Werten zu erhalten, benötigte ich die Option flat=True.

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