Подтвердить что ты не робот

Модели django, выбирающие одно поле

У меня есть таблица/модели под названием Employees, и я хотел бы получить все строки одного поля в качестве набора запросов.

Я знаю, что могу сделать это так (надеюсь, что я это сделаю правильно):

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

Будет ли запрашивать базу данных для всех полей и использовать только одну? Есть ли лучший (более быстрый) способ сделать это?

4b9b3361

Ответ 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 %}