Разница между GET и FILTER в модельном слое Django - PullRequest
19 голосов
/ 09 октября 2009

В чем разница, пожалуйста, объясните их с точки зрения неспециалистов с примерами.Спасибо!

1 Ответ

40 голосов
/ 09 октября 2009

Не знаю, нужен ли вам пример, это довольно просто:

  • если вы знаете, что это один объект, соответствующий вашему запросу, используйте get. Он потерпит неудачу, если его больше одного.
  • в противном случае используйте фильтр, который выдает список объектов.

Чтобы быть более точным:

  • MyTable.objects.get(id=x).whatever дает вам свойство whatever вашего объекта.

get () повышает MultipleObjectsReturned, если найдено более одного объекта. Исключение MultipleObjectsReturned является атрибутом модели класс.

get () вызывает исключение DoesNotExist, если объект не был найден для заданные параметры. Это исключение также является атрибутом класса модели.

  • MyTable.objects.filter(somecolumn=x) не только можно использовать в качестве списка, но вы также можете запросить его снова, что-то вроде MyTable.objects.filter(somecolumn=x).order_by('date').
  • Причина в том, что на самом деле это не список, а объект запроса. Вы можете перебирать его как список: for obj in MyTable.objects.filter(somecolumn=x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...