Модели django, выбирающие одно поле
У меня есть таблица/модели под названием Employees
, и я хотел бы получить все строки одного поля в качестве набора запросов.
Я знаю, что могу сделать это так (надеюсь, что я это сделаю правильно):
emp_list = Employees.objects.get(all)
emp_names = emp_list.eng_name
Будет ли запрашивать базу данных для всех полей и использовать только одну? Есть ли лучший (более быстрый) способ сделать это?
Ответы
Ответ 1
Employees.objects.values_list('eng_name', flat=True)
Это создает плоский список всех eng_name
. Если вам нужно более одного поля в строке, вы не можете сделать плоский список: это создаст список кортежей:
Employees.objects.values_list('eng_name', 'rank')
Ответ 2
В дополнение к values_list
как упоминает Даниэль, вы также можете использовать only
(или defer
для обратного эффекта), чтобы получить набор запросов объектов, имеющих только свои id и указанные поля:
Employees.objects.only('eng_name')
Это запустит один запрос:
SELECT id, eng_name FROM employees
Ответ 3
Мы можем выбрать обязательные поля над значениями.
Employee.objects.all().values('eng_name','rank')
Ответ 4
Ответ Оскара Перссона - лучший способ справиться с этим, поскольку он упрощает передачу данных в контекст и их нормальную обработку из шаблона, поскольку мы получаем экземпляры объекта (легко повторяемые для получения реквизитов) вместо списка простых значений.
После этого вы можете легко получить желаемую опору:
for employee in employees:
print(employee.eng_name)
Или в шаблоне:
{% for employee in employees %}
<p>{{ employee.eng_name }}</p>
{% endfor %}