Долгожданная ветка 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 генерируется при сложных запросах...