Pull to refresh

queryset-refactor

Reading time1 min
Views693
Долгожданная ветка queryset-refactor наконец-то слита с основной рабочей веткой trunk (изменение r7477). Официальная документация для trunk-а на сайте тоже обновлена.
Что это значит для всех нас?
  • Самое главное — это, конечно, model inheritance. Модели могут наследоваться друг от друга, и при этом соответствующие им таблицы в базе данных будут ссылаться друг на друга соответственно.
  • Базовые классы при этом могут быть абстрактными (и в таком случае для них не будет создаваться отдельной таблицы, а определённые в них поля будут созданы в таблице модели-потомка), а могут и не быть (и тогда таблица модели-потомка будет ссылаться на базовую таблицу).
  • Наследование, кстати, может быть и множественным.
  • Поля OneToOneField больше не создают автоматически первичный ключ. Будьте осторожны, это изменение с потерей обратной совместимости.
  • Теперь объекты Q могут использоваться с операторами &, | и ~, и результатом тоже будет Q-объект.
  • .filter(field=None) (или .filter(field__exact=None)) теперь эквивалентно .filter(field__isnull=True).
  • Теперь у QuerySet-а есть метод update(), позволяющий изменить что-нибудь сразу для всех полей, соответствующих QuerySet-у.

… ну, и ещё много всего прочего интересного, но отдельно стоит упомянуть недодокументированную приятную фенечку — .query и .query.as_sql() для любых QuerySet-ов — теперь становится понятно, какой SQL генерируется при сложных запросах...
Tags:
Hubs:
+21
Comments6

Articles

Change theme settings