2011-09-21 13 views
44

Mam tabelę/modele o nazwie Employees i chciałbym, aby wszystkie wiersze z jednego pola jako zestaw kwerend.Modele django wybierające pojedyncze pole

wiem, że mogę to zrobić tak (mam nadzieję, że robię to prawo nawet):

emp_list = Employees.objects.get(all) 
emp_names = emp_list.eng_name 

Czy kwerendy bazy danych dla wszystkich dziedzinach i przy użyciu tylko jednego? Czy istnieje lepszy (szybszy) sposób to zrobić?

+0

Co masz na myśli mówiąc "i używając tylko jednego"? A 'SELECT col' zamiast' SELECT * '? –

Odpowiedz

83
Employees.objects.values_list('eng_name', flat=True) 

To tworzy płaską listę wszystkich eng_name s. Jeśli chcesz więcej niż jedno pole w każdym wierszu, nie można zrobić listę płaskiej: to będzie utworzyć listę list:

Employees.objects.values_list('eng_name', 'rank') 
+0

dzięki za odpowiedź, co jeśli chcę wybrać tylko 1 lub więcej pól (nie wszystkie)? – zentenk

+0

Niestety, nie rozumiem pytania. –

+1

nevermind Znalazłem dokumenty, dzięki! – zentenk

4

Oprócz values_list jak Danielmentions można również użyć only (lub defer dla efekt odwrotny), aby uzyskać queryset obiektów posiadających tylko identyfikator i określonych dziedzinach:

Employees.objects.only('eng_name') 

ten będzie działał jeden zapytanie:

SELECT id, eng_name FROM employees