2016-11-07 4 views
0

Рассмотрим следующую модель Django:Джанго: Как получить параметры из QuerySet

class SomeModel(models.Model): 
    some_var = models.IntergerField() 

Что лучший способ получить массив через параметры модели из результатов поиска?

Пример (не работает, конечно):

a = SomeModel.objects.all().some_var 

бы дать что-то вроде [3, 4, 1, 9, 1, 2]

ответ

5

Существует существующий метод QuerySet называется values_listhttps://docs.djangoproject.com/en/1.10/ref/models/querysets/#values-list

a = SomeModel.objects.all().values_list('some_var', flat=True) 

Мы используем flat=True так что это даст плоский список

Entry.objects.values_list('id').order_by('id') 
[(1,), (2,), (3,), ...] 
Entry.objects.values_list('id', flat=True).order_by('id') 
[1, 2, 3, ...] 
+0

Это правильно, Итак, upvote.Wondering, Какова будет структура результата? Список, разделенный запятыми, может быть .. ?? –

+0

@PrakharTrivedi: Да, 'list' (которые разделены запятой;)) значений в столбце' some_var' –

+0

@PrakharTrivedi, строго говоря, результат не будет списком, это будет набор запросов. Если все, что вы хотите сделать, это перебрать его или передать в качестве значения в другой файл queryset.filter(), он будет вести себя точно так же. Но если вы хотите связать его с каким-либо другим списком, используйте отрицательную индексацию (например, qs [-2]), вам придется явно преобразовать ее в список. –

0

Вы можете дать список, это хотелось бы следующее:

foo = [i.some_var for i in SomeModel.objects.all()] 

Но я был уведомлен, что это будет тратить память.

+0

Учет списка дает список, а не генератор. И если SomeModel имеет много полей, это будет расточительно с точки зрения ОЗУ, поскольку Django придется загружать все в память. –

+0

Спасибо за информацию. –