В чем разница между .get () и .fetch (1) - PullRequest
7 голосов
/ 27 марта 2010

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

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

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

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

{% для данных в данных%}

{{datum.title}}

{{datum.content}}
   </div>

{% endfor%}

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

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

, который теперь работает, как я и предполагал. В документации написано

Функция db.get () извлекает сущность из хранилища данных для ключа (или список ключей).

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

Ответы [ 2 ]

9 голосов
/ 27 марта 2010

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

1 голос
/ 27 марта 2010

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

...