В чем разница между ними?получать и.fetch (1)


Я написал приложение, и часть его использует синтаксический анализатор URL для получения определенных данных способом типа ReST. Так что если вы положите именем /foo/бар в путь она найдет все элементы строки и если вы поставили именем /foo вернет все элементы с Foo

Итак, мое приложение имеет запрос типа

data = Paths.all().filter('path =', self.request.path).get()

Который работает блестяще. Теперь я хочу отправить это в пользовательский интерфейс, используя шаблоны

{% для базы данных %}

{{datum.название }}

{{ данная величина.содержание }}
   </div>

{% endfor %}

Когда я делаю это, я получаю данные не повторяющейся ошибки. Поэтому я обновил Django до {% for datum in data.all %} , который теперь, похоже, вытягивает больше данных, чем я ему каким-то образом давал. Он показывает все данные в хранилище данных, которое не является идеальным. Поэтому я удалил его .все из Django и изменил запрос хранилища данных на

data = Paths.all().filter('path =', self.request.path).fetch(1)
Который теперь работает так, как я и предполагал. В документации сказано

БД.функция get () извлекает сущность из хранилища данных для ключа (или список из Ключи).

Итак, мой вопрос заключается в том, почему я могу перебирать запрос, когда он возвращается с fetch(), но не может с get(). Где мое понимание пошло не так?

2 6

2 ответа:

Вы ищете в документах неправильный get () - вам нужен метод get() для объекта запроса. В двух словах .функция fetch () всегда возвращает список while .get() возвращает первый результат или нет, если результатов нет.

Get () требует (я думаю), чтобы был ровно один элемент, и возвращает его, в то время как fetch () возвращает список первых n элементов, где n в этом случае оказывается 1.