Короткий ответ
Да, потому что в этом случае str
использует __repr__
.
Обоснование:
Согласно этот превосходный ответ SO на repr vs str в python:
, если __repr__
определено, а __str__
- нет, объект будет вести себя так, как если бы __str__=__repr__
Глядя на код django , мы видим, что __repr__
определено, а __str__
- нет, поэтому мы можем предположить, что документы на repr
покрывают str
также.
Попробуйте
Довольно легко проверить подобные вещи самостоятельно:
>>> from django.db import connection
>>> len(connection.queries)
0
>>> str(User.objects.all())
"<QuerySet [<User: test>, ...]>"
>>> len(connection.queries)
1
Прокомментируйте некоторые другие ответы
База данных не получает прямого доступа при вызове all()
, что является прелестью ленивой оценки набора запросов.Запрос к БД не запускается до тех пор, пока не потребуются элементы ответа (как указано в документации, на которую указывает OP).