123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- ============================================
- Django 1.9 release notes - UNDER DEVELOPMENT
- ============================================
- Welcome to Django 1.9!
- These release notes cover the `new features`_, as well as some `backwards
- incompatible changes`_ you'll want to be aware of when upgrading from Django
- 1.8 or older versions. We've :ref:`dropped some features
- <deprecation-removed-in-1.9>` that have reached the end of their deprecation
- cycle, and we've `begun the deprecation process for some features`_.
- .. _`new features`: `What's new in Django 1.9`_
- .. _`backwards incompatible changes`: `Backwards incompatible changes in 1.9`_
- .. _`dropped some features`: `Features removed in 1.9`_
- .. _`begun the deprecation process for some features`: `Features deprecated in 1.9`_
- Python compatibility
- ====================
- Like Django 1.8, Django 1.9 requires Python 2.7 or above, though we
- **highly recommend** the latest minor release. We've dropped support for
- Python 3.2 and added support for Python 3.5.
- What's new in Django 1.9
- ========================
- ...
- Minor features
- ~~~~~~~~~~~~~~
- :mod:`django.contrib.admin`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Admin views now have ``model_admin`` or ``admin_site`` attributes.
- :mod:`django.contrib.auth`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * The default iteration count for the PBKDF2 password hasher has been increased
- by 20%. This backwards compatible change will not affect users who have
- subclassed ``django.contrib.auth.hashers.PBKDF2PasswordHasher`` to change the
- default value.
- :mod:`django.contrib.gis`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.messages`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.redirects`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.sessions`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.sitemaps`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.sites`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.staticfiles`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- :mod:`django.contrib.syndication`
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ...
- Cache
- ^^^^^
- * ...
- Email
- ^^^^^
- * ...
- File Storage
- ^^^^^^^^^^^^
- * ...
- File Uploads
- ^^^^^^^^^^^^
- * ...
- Forms
- ^^^^^
- * :class:`~django.forms.ModelForm` accepts the new ``Meta`` option
- ``field_classes`` to customize the type of the fields. See
- :ref:`modelforms-overriding-default-fields` for details.
- Generic Views
- ^^^^^^^^^^^^^
- * Class based views generated using ``as_view()`` now have ``view_class``
- and ``view_initkwargs`` attributes.
- Internationalization
- ^^^^^^^^^^^^^^^^^^^^
- * ...
- Management Commands
- ^^^^^^^^^^^^^^^^^^^
- * ...
- Models
- ^^^^^^
- * Added the :meth:`RelatedManager.set()
- <django.db.models.fields.related.RelatedManager.set()>` method to the related
- managers created by ``ForeignKey``, ``GenericForeignKey``, and
- ``ManyToManyField``.
- Signals
- ^^^^^^^
- * ...
- Templates
- ^^^^^^^^^
- * Template tags created with the :meth:`~django.template.Library.simple_tag`
- helper can now store results in a template variable by using the ``as``
- argument.
- Requests and Responses
- ^^^^^^^^^^^^^^^^^^^^^^
- * ...
- Tests
- ^^^^^
- * ...
- Validators
- ^^^^^^^^^^
- * ...
- Backwards incompatible changes in 1.9
- =====================================
- .. warning::
- In addition to the changes outlined in this section, be sure to review the
- :doc:`deprecation timeline </internals/deprecation>` for any features that
- have been removed. If you haven't updated your code within the
- deprecation timeline for a given feature, its removal may appear as a
- backwards incompatible change.
- Database backend API
- ~~~~~~~~~~~~~~~~~~~~
- * A couple of new tests rely on the ability of the backend to introspect column
- defaults (returning the result as ``Field.default``). You can set the
- ``can_introspect_default`` database feature to ``False`` if your backend
- doesn't implement this. You may want to review the implementation on the
- backends that Django includes for reference (:ticket:`24245`).
- Default settings that were tuples are now lists
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The default settings in ``django.conf.global_settings`` were a combination of
- lists and tuples. All settings that were formerly tuples are now lists.
- ``is_usable`` attribute on template loaders is removed
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Django template loaders previously required an ``is_usable`` attribute to be
- defined. If a loader was configured in the template settings and this attribute
- was ``False``, the loader would be silently ignored. In practice, this was only
- used by the egg loader to detect if setuptools was installed. The ``is_usable``
- attribute is now removed and the egg loader instead fails at runtime if
- setuptools is not installed.
- Related set direct assignment
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- :ref:`Direct assignment <direct-assignment>`) used to perform a ``clear()``
- followed by a call to ``add()``. This caused needlessly large data changes
- and prevented using the :data:`~django.db.models.signals.m2m_changed` signal
- to track individual changes in many-to-many relations.
- Direct assignment now relies on the the new
- :meth:`django.db.models.fields.related.RelatedManager.set()` method on
- related managers which by default only processes changes between the
- existing related set and the one that's newly assigned. The previous behavior
- can be restored by replacing direct assignment by a call to ``set()`` with
- the keyword argument ``clear=True``.
- ``ModelForm``, and therefore ``ModelAdmin``, internally rely on direct
- assignment for many-to-many relations and as a consequence now use the new
- behavior.
- Miscellaneous
- ~~~~~~~~~~~~~
- * CSS and images in ``contrib.admin`` to support Internet Explorer 6 & 7 have
- been removed as these browsers have reached end-of-life.
- * ``django.http.responses.REASON_PHRASES`` and
- ``django.core.handlers.wsgi.STATUS_CODE_TEXT`` have been removed. Use
- Python's stdlib instead: :data:`http.client.responses` for Python 3 and
- `httplib.responses`_ for Python 2.
- .. _`httplib.responses`: https://docs.python.org/2/library/httplib.html#httplib.responses
- * ``ValuesQuerySet`` and ``ValuesListQuerySet`` have been removed.
- .. _deprecated-features-1.9:
- Features deprecated in 1.9
- ==========================
- ``assignment_tag()``
- ~~~~~~~~~~~~~~~~~~~~
- Django 1.4 added the ``assignment_tag`` helper to ease the creation of
- template tags that store results in a template variable. The
- :meth:`~django.template.Library.simple_tag` helper has gained this same
- ability, making the ``assignment_tag`` obsolete. Tags that use
- ``assignment_tag`` should be updated to use ``simple_tag``.
- Miscellaneous
- ~~~~~~~~~~~~~
- * The ``weak`` argument to ``django.dispatch.signals.Signal.disconnect()`` has
- been deprecated as it has no effect.
- * The ``check_aggregate_support()`` method of
- ``django.db.backends.base.BaseDatabaseOperations`` has been deprecated and
- will be removed in Django 2.1. The more general ``check_expression_support()``
- should be used instead.
- * ``django.forms.extras`` is deprecated. You can find
- :class:`~django.forms.SelectDateWidget` in ``django.forms.widgets``
- (or simply ``django.forms``) instead.
- .. removed-features-1.9:
- Features removed in 1.9
- =======================
- These features have reached the end of their deprecation cycle and so have been
- removed in Django 1.9 (please see the :ref:`deprecation timeline
- <deprecation-removed-in-1.9>` for more details):
- * ``django.utils.dictconfig`` is removed.
- * ``django.utils.importlib`` is removed.
- * ``django.utils.tzinfo`` is removed.
- * ``django.utils.unittest`` is removed.
- * The ``syncdb`` command is removed.
- * ``django.db.models.signals.pre_syncdb`` and
- ``django.db.models.signals.post_syncdb`` is removed.
- * Support for ``allow_syncdb`` on database routers is removed.
- * The legacy method of syncing apps without migrations is removed,
- and migrations are compulsory for all apps. This includes automatic
- loading of ``initial_data`` fixtures and support for initial SQL data.
- * All models need to be defined inside an installed application or declare an
- explicit :attr:`~django.db.models.Options.app_label`. Furthermore, it isn't
- possible to import them before their application is loaded. In particular, it
- isn't possible to import models inside the root package of an application.
- * The model and form ``IPAddressField`` is removed. A stub field remains for
- compatibility with historical migrations.
- * ``AppCommand.handle_app()`` is no longer be supported.
- * ``RequestSite`` and ``get_current_site()`` are no longer importable from
- ``django.contrib.sites.models``.
- * FastCGI support via the ``runfcgi`` management command is removed.
- * ``django.utils.datastructures.SortedDict`` is removed.
- * ``ModelAdmin.declared_fieldsets`` is removed.
- * The ``util`` modules that provided backwards compatibility are removed:
- * ``django.contrib.admin.util``
- * ``django.contrib.gis.db.backends.util``
- * ``django.db.backends.util``
- * ``django.forms.util``
- * ``ModelAdmin.get_formsets`` is removed.
- * The backward compatible shims introduced to rename the
- ``BaseMemcachedCache._get_memcache_timeout()`` method to
- ``get_backend_timeout()`` is removed.
- * The ``--natural`` and ``-n`` options for :djadmin:`dumpdata` are removed.
- * The ``use_natural_keys`` argument for ``serializers.serialize()`` is removed.
- * Private API ``django.forms.forms.get_declared_fields()`` is removed.
- * The ability to use a ``SplitDateTimeWidget`` with ``DateTimeField`` is
- removed.
- * The ``WSGIRequest.REQUEST`` property is removed.
- * The class ``django.utils.datastructures.MergeDict`` is removed.
- * The ``zh-cn`` and ``zh-tw`` language codes are removed.
- * The internal ``django.utils.functional.memoize()`` is removed.
- * ``django.core.cache.get_cache`` is removed.
- * ``django.db.models.loading`` is removed.
- * Passing callable arguments to querysets is no longer possible.
- * ``BaseCommand.requires_model_validation`` is removed in favor of
- ``requires_system_checks``. Admin validators is replaced by admin checks.
- * The ``ModelAdmin.validator_class`` and ``default_validator_class`` attributes
- are removed.
- * ``ModelAdmin.validate()`` is removed.
- * ``django.db.backends.DatabaseValidation.validate_field`` is removed in
- favor of the ``check_field`` method.
- * The ``check`` management command is removed.
- * ``django.utils.module_loading.import_by_path`` is removed in favor of
- ``django.utils.module_loading.import_string``.
- * ``ssi`` and ``url`` template tags are removed from the ``future`` template
- tag library.
- * ``django.utils.text.javascript_quote()`` is removed.
- * Database test settings as independent entries in the database settings,
- prefixed by ``TEST_``, are no longer supported.
- * The `cache_choices` option to :class:`~django.forms.ModelChoiceField` and
- :class:`~django.forms.ModelMultipleChoiceField` is removed.
- * The default value of the
- :attr:`RedirectView.permanent <django.views.generic.base.RedirectView.permanent>`
- attribute has changed from ``True`` to ``False``.
- * ``django.contrib.sitemaps.FlatPageSitemap`` is removed in favor of
- ``django.contrib.flatpages.sitemaps.FlatPageSitemap``.
- * Private API ``django.test.utils.TestTemplateLoader`` is removed.
- * The ``django.contrib.contenttypes.generic`` module is removed.
|