Как ограничить количество полей в queryset
Python
Middle
Без компании
Как ограничить количество полей в queryset
Ответы
Для ограничения количества полей в `QuerySet` можно использовать методы `values()` или `only()`.
**1. `values()`** – возвращает словари вместо объектов модели, выбирая только указанные поля:
```
queryset = MyModel.objects.values('id', 'name') # Только id и name
```
**2. `only()`** – загружает указанные поля, остальные подгружаются лениво при обращении:
```
queryset = MyModel.objects.only('id', 'name')
```
**3. `defer()`** – исключает указанные поля (противоположность `only()`):
```
queryset = MyModel.objects.defer('description') # Все поля, кроме description
```
**Важно:**
- `values()` уменьшает объем данных, но возвращает словари.
- `only()` и `defer()` работают с объектами модели, но могут вызвать дополнительные запросы при обращении к отложенным полям.
Пример с `only()`:
```
users = User.objects.only('username', 'email')
for user in users:
print(user.username) # Загружено сразу
print(user.last_login) # Дополнительный запрос к БД
```