1. Выбор отдельных элементов
Похоже, вы пытаетесь получить один объект. Использование filter
вернет объект QuerySet
(как это происходит в вашем коде), который ведет себя больше как список (и, как вы заметили, отсутствует атрибут name
).
У вас есть два варианта здесь. Во-первых, вы можете просто взять первый элемент:
info_l = info.objects.filter(id=1)[0]
Вместо этого вы также можете использовать метод objects.get
, который вернет один объект (и вызовет исключение, если он не существует):
info_l = info.objects.get(id=1)
Django имеет довольно хорошую документацию по QuerySets, и, возможно, стоит взглянуть на нее:
Документы по использованию фильтров
QuerySet
ссылка
2. Получение определенных полей
Django предоставляет методы defer
и only
, которые позволят вам выбирать конкретные поля из базы данных, а не извлекать все сразу. Это на самом деле не мешает чтению полей; скорее это загружает их лениво. defer
- это режим «opt-in», который позволяет вам указать, какие поля следует загружать лениво. only
is out-out - вы называете это, и только поля, которые вы передаете, будут загружены с нетерпением.
Итак, в вашем примере вы хотели бы сделать что-то вроде этого:
info_l = info.objects.filter(id=1).only('name')[0]
Хотя с такой простой моделью, как в приведенном вами примере, я бы не стал сильно беспокоиться об ограничении полей.