Removed versionadded/changed annotations for 1.8.

This commit is contained in:
Tim Graham 2015-09-12 16:27:30 -04:00
parent 48e7787db5
commit 54848a96dd
74 changed files with 44 additions and 852 deletions

View File

@ -52,10 +52,6 @@ Lookup registration can also be done using a decorator pattern::
class NotEqualLookup(Lookup): class NotEqualLookup(Lookup):
# ... # ...
.. versionchanged:: 1.8
The ability to use the decorator pattern was added.
We can now use ``foo__ne`` for any field ``foo``. You will need to ensure that We can now use ``foo__ne`` for any field ``foo``. You will need to ensure that
this registration happens before you try to create any querysets using it. You this registration happens before you try to create any querysets using it. You
could place the implementation in a ``models.py`` file, or register the lookup could place the implementation in a ``models.py`` file, or register the lookup

View File

@ -136,11 +136,6 @@ because some commands shipped with Django perform several tasks (for example,
user-facing content rendering and database population) that require a user-facing content rendering and database population) that require a
project-neutral string language. project-neutral string language.
.. versionchanged:: 1.8
In previous versions, Django forced the "en-us" locale instead of
deactivating translations.
If, for some reason, your custom management command needs to use a fixed locale, If, for some reason, your custom management command needs to use a fixed locale,
you should manually activate and deactivate it in your you should manually activate and deactivate it in your
:meth:`~BaseCommand.handle` method using the functions provided by the I18N :meth:`~BaseCommand.handle` method using the functions provided by the I18N
@ -226,8 +221,6 @@ All attributes can be set in your derived class and can be used in
.. attribute:: BaseCommand.missing_args_message .. attribute:: BaseCommand.missing_args_message
.. versionadded:: 1.8
If your command defines mandatory positional arguments, you can customize If your command defines mandatory positional arguments, you can customize
the message error returned in the case of missing arguments. The default is the message error returned in the case of missing arguments. The default is
output by :py:mod:`argparse` ("too few arguments"). output by :py:mod:`argparse` ("too few arguments").
@ -281,8 +274,6 @@ the :meth:`~BaseCommand.handle` method must be implemented.
.. method:: BaseCommand.add_arguments(parser) .. method:: BaseCommand.add_arguments(parser)
.. versionadded:: 1.8
Entry point to add parser arguments to handle command line arguments passed Entry point to add parser arguments to handle command line arguments passed
to the command. Custom commands should override this method to add both to the command. Custom commands should override this method to add both
positional and optional arguments accepted by the command. Calling positional and optional arguments accepted by the command. Calling

View File

@ -340,8 +340,6 @@ Template filter code falls into one of two situations:
.. warning:: Avoiding XSS vulnerabilities when reusing built-in filters .. warning:: Avoiding XSS vulnerabilities when reusing built-in filters
.. versionchanged:: 1.8
Django's built-in filters have ``autoescape=True`` by default in order to Django's built-in filters have ``autoescape=True`` by default in order to
get the proper autoescaping behavior and avoid a cross-site script get the proper autoescaping behavior and avoid a cross-site script
vulnerability. vulnerability.
@ -849,15 +847,6 @@ template yourself. For example::
t = context.template.engine.get_template('small_fragment.html') t = context.template.engine.get_template('small_fragment.html')
return t.render(Context({'var': obj}, autoescape=context.autoescape)) return t.render(Context({'var': obj}, autoescape=context.autoescape))
.. versionchanged:: 1.8
The ``template`` attribute of ``Context`` objects was added in Django 1.8.
:meth:`context.template.engine.get_template
<django.template.Engine.get_template>` must be used instead of
:func:`django.template.loader.get_template` because the latter now returns
a wrapper whose ``render`` method doesn't accept a
:class:`~django.template.Context`.
If we had neglected to pass in the current ``context.autoescape`` value to our If we had neglected to pass in the current ``context.autoescape`` value to our
new ``Context`` in this example, the results would have *always* been new ``Context`` in this example, the results would have *always* been
automatically escaped, which may not be the desired behavior if the template automatically escaped, which may not be the desired behavior if the template

View File

@ -36,8 +36,6 @@ attribute::
migrations.RunPython(forwards), migrations.RunPython(forwards),
] ]
.. versionadded:: 1.8
You can also provide hints that will be passed to the :meth:`allow_migrate()` You can also provide hints that will be passed to the :meth:`allow_migrate()`
method of database routers as ``**hints``: method of database routers as ``**hints``:

View File

@ -207,12 +207,6 @@ level:
class MyDeprecatedTests(unittest.TestCase): class MyDeprecatedTests(unittest.TestCase):
... ...
.. versionchanged:: 1.8
Previous versions of Django had some ``Ignore*DeprecationWarningsMixin``
classes to prevent warnings from appearing. These have been replaced by the
``ignore_warnings`` decorator.
You can also add a test for the deprecation warning. You'll have to disable the You can also add a test for the deprecation warning. You'll have to disable the
"warning as error" behavior in your test by doing:: "warning as error" behavior in your test by doing::

View File

@ -282,10 +282,6 @@ combine this with ``--verbosity=2``, all SQL queries will be output::
$ ./runtests.py basic --debug-sql $ ./runtests.py basic --debug-sql
.. versionadded:: 1.8
The ``--reverse`` and ``--debug-sql`` options were added.
By default tests are run in parallel with one process per core. You can adjust By default tests are run in parallel with one process per core. You can adjust
this behavior with the ``--parallel`` option:: this behavior with the ``--parallel`` option::

View File

@ -114,11 +114,6 @@ ModelFormMixin
:exc:`~django.core.exceptions.ImproperlyConfigured` exception will be :exc:`~django.core.exceptions.ImproperlyConfigured` exception will be
raised. raised.
.. versionchanged:: 1.8
Previously if both ``fields`` and ``form_class`` were specified,
``fields`` was silently ignored.
**Mixins** **Mixins**
* :class:`django.views.generic.edit.FormMixin` * :class:`django.views.generic.edit.FormMixin`
@ -142,11 +137,6 @@ ModelFormMixin
result in an :exc:`~django.core.exceptions.ImproperlyConfigured` result in an :exc:`~django.core.exceptions.ImproperlyConfigured`
exception. exception.
.. versionchanged:: 1.8
Previously, omitting this attribute was allowed and resulted in
a form with all fields of the model.
.. attribute:: success_url .. attribute:: success_url
The URL to redirect to when the form is successfully processed. The URL to redirect to when the form is successfully processed.

View File

@ -74,8 +74,6 @@ MultipleObjectMixin
.. attribute:: ordering .. attribute:: ordering
.. versionadded:: 1.8
A string or list of strings specifying the ordering to apply to the ``queryset``. A string or list of strings specifying the ordering to apply to the ``queryset``.
Valid values are the same as those for :meth:`~django.db.models.query.QuerySet.order_by`. Valid values are the same as those for :meth:`~django.db.models.query.QuerySet.order_by`.
@ -120,8 +118,6 @@ MultipleObjectMixin
.. method:: get_ordering() .. method:: get_ordering()
.. versionadded:: 1.8
Returns a string (or iterable of strings) that defines the ordering that Returns a string (or iterable of strings) that defines the ordering that
will be applied to the ``queryset``. will be applied to the ``queryset``.

View File

@ -51,8 +51,6 @@ TemplateResponseMixin
.. attribute:: template_engine .. attribute:: template_engine
.. versionadded:: 1.8
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
loading the template. ``template_engine`` is passed as the ``using`` loading the template. ``template_engine`` is passed as the ``using``
keyword argument to ``response_class``. Default is ``None``, which keyword argument to ``response_class``. Default is ``None``, which
@ -61,25 +59,11 @@ TemplateResponseMixin
.. attribute:: response_class .. attribute:: response_class
The response class to be returned by ``render_to_response`` method. The response class to be returned by ``render_to_response`` method.
Default is Default is :class:`TemplateResponse
:class:`TemplateResponse <django.template.response.TemplateResponse>`. <django.template.response.TemplateResponse>`. The template and context
The template and context of ``TemplateResponse`` instances can be of ``TemplateResponse`` instances can be altered later (e.g. in
altered later (e.g. in
:ref:`template response middleware <template-response-middleware>`). :ref:`template response middleware <template-response-middleware>`).
.. versionchanged:: 1.8
In older versions of Django, ``TemplateResponse`` used
:class:`~django.template.RequestContext` in such a way that values
from template context processors would override template variables
defined in your views. For example, if you subclassed
:class:`DetailView <django.views.generic.detail.DetailView>` and
set ``context_object_name`` to ``user``, the
``django.contrib.auth.context_processors.auth`` context processor
would overwrite your variable with the current user. Now, for
consistency with the ``render()`` shortcut, values in the context
provided by the class override values from context processors.
If you need custom template loading or custom context object If you need custom template loading or custom context object
instantiation, create a ``TemplateResponse`` subclass and assign it to instantiation, create a ``TemplateResponse`` subclass and assign it to
``response_class``. ``response_class``.

View File

@ -53,8 +53,6 @@ SingleObjectMixin
.. attribute:: query_pk_and_slug .. attribute:: query_pk_and_slug
.. versionadded:: 1.8
If ``True``, causes :meth:`get_object()` to perform its lookup using If ``True``, causes :meth:`get_object()` to perform its lookup using
both the primary key and the slug. Defaults to ``False``. both the primary key and the slug. Defaults to ``False``.
@ -81,8 +79,6 @@ SingleObjectMixin
:attr:`slug_url_kwarg` argument, and performs a slug lookup using the :attr:`slug_url_kwarg` argument, and performs a slug lookup using the
:attr:`slug_field`. :attr:`slug_field`.
.. versionchanged:: 1.8
When :attr:`query_pk_and_slug` is ``True``, ``get_object()`` will When :attr:`query_pk_and_slug` is ``True``, ``get_object()`` will
perform its lookup using both the primary key and the slug. perform its lookup using both the primary key and the slug.

View File

@ -915,8 +915,6 @@ subclass::
('is_staff', admin.BooleanFieldListFilter), ('is_staff', admin.BooleanFieldListFilter),
) )
.. versionadded:: 1.8
You can now limit the choices of a related model to the objects You can now limit the choices of a related model to the objects
involved in that relation using ``RelatedOnlyFieldListFilter``:: involved in that relation using ``RelatedOnlyFieldListFilter``::
@ -1200,8 +1198,6 @@ subclass::
.. attribute:: ModelAdmin.show_full_result_count .. attribute:: ModelAdmin.show_full_result_count
.. versionadded:: 1.8
Set ``show_full_result_count`` to control whether the full count of objects Set ``show_full_result_count`` to control whether the full count of objects
should be displayed on a filtered admin page (e.g. ``99 results (103 total)``). should be displayed on a filtered admin page (e.g. ``99 results (103 total)``).
If this option is set to ``False``, a text like ``99 results (Show all)`` If this option is set to ``False``, a text like ``99 results (Show all)``
@ -1711,8 +1707,6 @@ templates used by the :class:`ModelAdmin` views:
.. method:: ModelAdmin.has_module_permission(request) .. method:: ModelAdmin.has_module_permission(request)
.. versionadded:: 1.8
Should return ``True`` if displaying the module on the admin index page and Should return ``True`` if displaying the module on the admin index page and
accessing the module's index page is permitted, ``False`` otherwise. accessing the module's index page is permitted, ``False`` otherwise.
Uses :meth:`User.has_module_perms() Uses :meth:`User.has_module_perms()
@ -1788,10 +1782,6 @@ templates used by the :class:`ModelAdmin` views:
``obj_id`` is the serialized identifier used to retrieve the object to be ``obj_id`` is the serialized identifier used to retrieve the object to be
deleted. deleted.
.. versionadded:: 1.8
The ``obj_id`` parameter was added.
.. method:: ModelAdmin.get_changeform_initial_data(request) .. method:: ModelAdmin.get_changeform_initial_data(request)
A hook for the initial data on admin change forms. By default, fields are A hook for the initial data on admin change forms. By default, fields are
@ -1895,10 +1885,6 @@ To avoid conflicts with user-supplied scripts or libraries, Django's jQuery
in your own admin JavaScript without including a second copy, you can use the in your own admin JavaScript without including a second copy, you can use the
``django.jQuery`` object on changelist and add/edit views. ``django.jQuery`` object on changelist and add/edit views.
.. versionchanged:: 1.8
The embedded jQuery has been upgraded from 1.9.1 to 1.11.2.
.. versionchanged:: 1.9 .. versionchanged:: 1.9
The embedded jQuery has been upgraded from 1.11.2 to 2.1.4. This drops The embedded jQuery has been upgraded from 1.11.2 to 2.1.4. This drops
@ -2119,8 +2105,6 @@ The ``InlineModelAdmin`` class adds:
.. attribute:: InlineModelAdmin.show_change_link .. attribute:: InlineModelAdmin.show_change_link
.. versionadded:: 1.8
Specifies whether or not inline objects that can be changed in the Specifies whether or not inline objects that can be changed in the
admin have a link to the change form. Defaults to ``False``. admin have a link to the change form. Defaults to ``False``.
@ -2519,8 +2503,6 @@ Templates can override or extend base admin templates as described in
.. attribute:: AdminSite.site_url .. attribute:: AdminSite.site_url
.. versionadded:: 1.8
The URL for the "View site" link at the top of each admin page. By default, The URL for the "View site" link at the top of each admin page. By default,
``site_url`` is ``/``. Set it to ``None`` to remove the link. ``site_url`` is ``/``. Set it to ``None`` to remove the link.
@ -2603,10 +2585,6 @@ Templates can override or extend base admin templates as described in
* ``admin_url``: admin changelist URL for the model * ``admin_url``: admin changelist URL for the model
* ``add_url``: admin URL to add a new model instance * ``add_url``: admin URL to add a new model instance
.. versionchanged:: 1.8
The ``request`` argument and the ``has_permission`` variable were added.
.. versionchanged:: 1.9 .. versionchanged:: 1.9
The ``available_apps`` variable was added. The ``available_apps`` variable was added.
@ -2732,12 +2710,6 @@ a pattern for your new view.
``AdminSite`` or ``self.admin_site.name`` if your view is on a ``AdminSite`` or ``self.admin_site.name`` if your view is on a
``ModelAdmin``. ``ModelAdmin``.
.. versionchanged:: 1.8
In previous versions of Django, you had to provide the ``current_app``
argument to :class:`~django.template.RequestContext` or
:class:`~django.template.Context` when rendering the template.
.. _auth_password_reset: .. _auth_password_reset:
Adding a password-reset feature Adding a password-reset feature

View File

@ -83,11 +83,6 @@ Fields
A datetime of the user's last login. A datetime of the user's last login.
.. versionchanged:: 1.8
This field will be ``null`` if the user has never logged in.
Previously it was set to the current date/time by default.
.. attribute:: date_joined .. attribute:: date_joined
A datetime designating when the account was created. Is set to the A datetime designating when the account was created. Is set to the
@ -285,11 +280,6 @@ Anonymous users
:meth:`~django.db.models.Model.save` and :meth:`~django.db.models.Model.save` and
:meth:`~django.db.models.Model.delete()` raise :exc:`NotImplementedError`. :meth:`~django.db.models.Model.delete()` raise :exc:`NotImplementedError`.
.. versionadded:: 1.8
``AnonymousUser.get_username()`` has been added to
better mirror :class:`django.contrib.auth.models.User`.
In practice, you probably won't need to use In practice, you probably won't need to use
:class:`~django.contrib.auth.models.AnonymousUser` objects on your own, but :class:`~django.contrib.auth.models.AnonymousUser` objects on your own, but
they're used by Web requests, as explained in the next section. they're used by Web requests, as explained in the next section.
@ -311,10 +301,6 @@ fields:
Required. 255 characters or fewer. Example: ``'Can vote'``. Required. 255 characters or fewer. Example: ``'Can vote'``.
.. versionchanged:: 1.8
The ``max_length`` increased from 50 to 255 characters.
.. attribute:: content_type .. attribute:: content_type
Required. A reference to the ``django_content_type`` database table, Required. A reference to the ``django_content_type`` database table,
@ -460,8 +446,6 @@ The following backends are available in :mod:`django.contrib.auth.backends`:
.. method:: get_user_permissions(user_obj, obj=None) .. method:: get_user_permissions(user_obj, obj=None)
.. versionadded:: 1.8
Returns the set of permission strings the ``user_obj`` has from their Returns the set of permission strings the ``user_obj`` has from their
own user permissions. Returns an empty set if own user permissions. Returns an empty set if
:meth:`~django.contrib.auth.models.AbstractBaseUser.is_anonymous` or :meth:`~django.contrib.auth.models.AbstractBaseUser.is_anonymous` or

View File

@ -345,11 +345,6 @@ Integrating with :mod:`django.contrib.sitemaps`
:attr:`~django.contrib.sitemaps.Sitemap.changefreq` or :attr:`~django.contrib.sitemaps.Sitemap.changefreq` or
:attr:`~django.contrib.sitemaps.Sitemap.priority`. :attr:`~django.contrib.sitemaps.Sitemap.priority`.
.. versionchanged:: 1.8
This class is available from ``django.contrib.sitemaps.FlatPageSitemap``
in older version of Django.
Example Example
------- -------

View File

@ -1090,8 +1090,6 @@ the same coordinate transformation repeatedly on different geometries::
Raster Data Objects Raster Data Objects
=================== ===================
.. versionadded:: 1.8
``GDALRaster`` ``GDALRaster``
---------------- ----------------

View File

@ -64,7 +64,8 @@ spatial functionality::
> CREATE EXTENSION postgis; > CREATE EXTENSION postgis;
The database user must be a superuser in order to run The database user must be a superuser in order to run
``CREATE EXTENSION postgis;``. ``CREATE EXTENSION postgis;``. The command is run during the :djadmin:`migrate`
process.
GeoDjango does not currently leverage any `PostGIS topology functionality`__. GeoDjango does not currently leverage any `PostGIS topology functionality`__.
If you plan to use those features at some point, you can also install the If you plan to use those features at some point, you can also install the
@ -73,12 +74,6 @@ postgis_topology;``.
__ http://postgis.net/docs/Topology.html __ http://postgis.net/docs/Topology.html
.. versionchanged:: 1.8
The ``CREATE EXTENSION postgis`` command is now automatically run during
the :djadmin:`migrate` process. You can still create it manually if you
wish.
Managing the database Managing the database
--------------------- ---------------------

View File

@ -160,8 +160,3 @@ Creating a spatial database for SpatiaLite
When running ``manage.py migrate`` with a SQLite or SpatiaLite database, the When running ``manage.py migrate`` with a SQLite or SpatiaLite database, the
database file will be automatically created if it doesn't exist. Django will database file will be automatically created if it doesn't exist. Django will
also ensure that the spatial metadata are initialized in the database. also ensure that the spatial metadata are initialized in the database.
.. versionchanged:: 1.8
Prior to Django 1.8, you had to initialize spatial metadata tables yourself
by manually running the "SELECT InitSpatialMetaData();" query.

View File

@ -2,8 +2,6 @@
GeoJSON Serializer GeoJSON Serializer
================== ==================
.. versionadded:: 1.8
.. module:: django.contrib.gis.serializers.geojson .. module:: django.contrib.gis.serializers.geojson
:synopsis: Serialization of GeoDjango models in the GeoJSON format. :synopsis: Serialization of GeoDjango models in the GeoJSON format.

View File

@ -4,8 +4,6 @@
.. module:: django.contrib.postgres .. module:: django.contrib.postgres
:synopsis: PostgreSQL-specific fields and features :synopsis: PostgreSQL-specific fields and features
.. versionadded:: 1.8
PostgreSQL has a number of features which are not shared by the other databases PostgreSQL has a number of features which are not shared by the other databases
Django supports. This optional module contains model fields and form fields for Django supports. This optional module contains model fields and form fields for
a number of PostgreSQL specific data types. a number of PostgreSQL specific data types.

View File

@ -243,8 +243,6 @@ Sitemap class reference
.. attribute:: Sitemap.i18n .. attribute:: Sitemap.i18n
.. versionadded:: 1.8
**Optional.** **Optional.**
A boolean attribute that defines if the URLs of this sitemap should A boolean attribute that defines if the URLs of this sitemap should

View File

@ -509,10 +509,6 @@ Finally, to avoid repetitive fallback code, the framework provides a
:class:`~django.contrib.sites.requests.RequestSite` which will always :class:`~django.contrib.sites.requests.RequestSite` which will always
use the unmodified host. use the unmodified host.
.. versionchanged:: 1.8
Looking up the current site based on ``request.get_host()`` was added.
.. versionchanged:: 1.9 .. versionchanged:: 1.9
Retrying the lookup with the port stripped was added. Retrying the lookup with the port stripped was added.

View File

@ -544,15 +544,6 @@ executing a command like::
or using a :class:`~django.db.migrations.operations.RunSQL` operation in a or using a :class:`~django.db.migrations.operations.RunSQL` operation in a
:ref:`data migration <data-migrations>`. :ref:`data migration <data-migrations>`.
.. versionchanged:: 1.8
Previously, Django truncated fractional seconds from ``datetime`` and
``time`` values when using the MySQL backend. Now it lets the database
decide whether it should drop that part of the value or not. By default, new
``DateTimeField`` or ``TimeField`` columns are now created with fractional
seconds support on MySQL 5.6.4 or later with either mysqlclient or
MySQLdb 1.2.5 or later.
``TIMESTAMP`` columns ``TIMESTAMP`` columns
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
@ -756,12 +747,6 @@ Some test suites also create views; to run these, the user also needs
the CREATE VIEW WITH ADMIN OPTION privilege. In particular, this is needed the CREATE VIEW WITH ADMIN OPTION privilege. In particular, this is needed
for Django's own test suite. for Django's own test suite.
.. versionchanged:: 1.8
Prior to Django 1.8, the test user was granted the CONNECT and RESOURCE
roles, so the extra privileges required for running the test suite were
different.
All of these privileges are included in the DBA role, which is appropriate All of these privileges are included in the DBA role, which is appropriate
for use on a private developer's database. for use on a private developer's database.

View File

@ -132,8 +132,6 @@ List all available tags.
.. django-admin-option:: --deploy .. django-admin-option:: --deploy
.. versionadded:: 1.8
The ``--deploy`` option activates some additional checks that are only relevant The ``--deploy`` option activates some additional checks that are only relevant
in a deployment setting. in a deployment setting.
@ -172,10 +170,6 @@ into compiled files.
``compilemessages`` now matches the operation of :djadmin:`makemessages`, ``compilemessages`` now matches the operation of :djadmin:`makemessages`,
scanning the project tree for ``.po`` files to compile. scanning the project tree for ``.po`` files to compile.
.. versionchanged:: 1.8
Added ``--exclude`` and ``--use-fuzzy`` options.
Example usage:: Example usage::
django-admin compilemessages --locale=pt_BR django-admin compilemessages --locale=pt_BR
@ -312,8 +306,6 @@ one model.
.. django-admin-option:: --output .. django-admin-option:: --output
.. versionadded:: 1.8
By default ``dumpdata`` will output all the serialized data to standard output. By default ``dumpdata`` will output all the serialized data to standard output.
This option allows you to specify the file to which the data is to be written. This option allows you to specify the file to which the data is to be written.
When this option is set and the verbosity is greater than 0 (the default), a When this option is set and the verbosity is greater than 0 (the default), a
@ -418,10 +410,6 @@ models that may have been removed since the fixture was originally generated.
The :djadminopt:`--app` option can be used to specify a single app to look The :djadminopt:`--app` option can be used to specify a single app to look
for fixtures in rather than looking through all apps. for fixtures in rather than looking through all apps.
.. versionchanged:: 1.8
``--ignorenonexistent`` also ignores non-existent models.
What's a "fixture"? What's a "fixture"?
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
@ -587,8 +575,6 @@ Separate multiple extensions with commas or use -e or --extension multiple times
Use the :djadminopt:`--locale` option (or its shorter version ``-l``) to Use the :djadminopt:`--locale` option (or its shorter version ``-l``) to
specify the locale(s) to process. specify the locale(s) to process.
.. versionadded:: 1.8
Use the :djadminopt:`--exclude` option (or its shorter version ``-x``) to Use the :djadminopt:`--exclude` option (or its shorter version ``-x``) to
specify the locale(s) to exclude from processing. If not provided, no locales specify the locale(s) to exclude from processing. If not provided, no locales
are excluded. are excluded.
@ -698,15 +684,11 @@ The ``--merge`` option enables fixing of migration conflicts.
.. django-admin-option:: --name, -n .. django-admin-option:: --name, -n
.. versionadded:: 1.8
The ``--name`` option allows you to give the migration(s) a custom name instead The ``--name`` option allows you to give the migration(s) a custom name instead
of a generated one. of a generated one.
.. django-admin-option:: --exit, -e .. django-admin-option:: --exit, -e
.. versionadded:: 1.8
The ``--exit`` option will cause ``makemigrations`` to exit with error code 1 The ``--exit`` option will cause ``makemigrations`` to exit with error code 1
when no migrations are created (or would have been created, if combined with when no migrations are created (or would have been created, if combined with
``--dry-run``). ``--dry-run``).
@ -749,8 +731,6 @@ run correctly.
.. django-admin-option:: --fake-initial .. django-admin-option:: --fake-initial
.. versionadded:: 1.8
The ``--fake-initial`` option can be used to allow Django to skip an app's The ``--fake-initial`` option can be used to allow Django to skip an app's
initial migration if all database tables with the names of all models created initial migration if all database tables with the names of all models created
by all :class:`~django.db.migrations.operations.CreateModel` operations in that by all :class:`~django.db.migrations.operations.CreateModel` operations in that
@ -970,8 +950,6 @@ showmigrations [<app_label> [<app_label>]]
.. django-admin:: showmigrations .. django-admin:: showmigrations
.. versionadded:: 1.8
Shows all migrations in a project. Shows all migrations in a project.
.. django-admin-option:: --list, -l .. django-admin-option:: --list, -l
@ -1238,8 +1216,6 @@ expected to run from. The default value is ``localhost:8081-8179``.
.. django-admin-option:: --keepdb .. django-admin-option:: --keepdb
.. versionadded:: 1.8
The ``--keepdb`` option can be used to preserve the test database between test The ``--keepdb`` option can be used to preserve the test database between test
runs. This has the advantage of skipping both the create and destroy actions runs. This has the advantage of skipping both the create and destroy actions
which can greatly decrease the time to run tests, especially those in a large which can greatly decrease the time to run tests, especially those in a large
@ -1249,8 +1225,6 @@ be applied to the test database before running the test suite.
.. django-admin-option:: --reverse .. django-admin-option:: --reverse
.. versionadded:: 1.8
The ``--reverse`` option can be used to sort test cases in the opposite order. The ``--reverse`` option can be used to sort test cases in the opposite order.
This may help in debugging the side effects of tests that aren't properly This may help in debugging the side effects of tests that aren't properly
isolated. :ref:`Grouping by test class <order-of-tests>` is preserved when using isolated. :ref:`Grouping by test class <order-of-tests>` is preserved when using
@ -1258,8 +1232,6 @@ this option.
.. django-admin-option:: --debug-sql .. django-admin-option:: --debug-sql
.. versionadded:: 1.8
The ``--debug-sql`` option can be used to enable :ref:`SQL logging The ``--debug-sql`` option can be used to enable :ref:`SQL logging
<django-db-logger>` for failing tests. If :djadminopt:`--verbosity` is ``2``, <django-db-logger>` for failing tests. If :djadminopt:`--verbosity` is ``2``,
then queries in passing tests are also output. then queries in passing tests are also output.
@ -1428,8 +1400,6 @@ it when running interactively.
Use the ``--database`` option to specify the database into which the superuser Use the ``--database`` option to specify the database into which the superuser
object will be saved. object will be saved.
.. versionadded:: 1.8
You can subclass the management command and override ``get_input_data()`` if you You can subclass the management command and override ``get_input_data()`` if you
want to customize data input and validation. Consult the source code for want to customize data input and validation. Consult the source code for
details on the existing implementation and the method's parameters. For example, details on the existing implementation and the method's parameters. For example,
@ -1767,13 +1737,6 @@ Named arguments can be passed by using either one of the following syntaxes::
# `use_natural_foreign_keys` is the option destination variable # `use_natural_foreign_keys` is the option destination variable
management.call_command('dumpdata', use_natural_foreign_keys=True) management.call_command('dumpdata', use_natural_foreign_keys=True)
.. versionchanged:: 1.8
The first syntax is now supported thanks to management commands using the
:py:mod:`argparse` module. For the second syntax, Django previously passed
the option name as-is to the command, now it is always using the ``dest``
variable name (which may or may not be the same as the option name).
Command options which take multiple options are passed a list:: Command options which take multiple options are passed a list::
management.call_command('dumpdata', exclude=['contenttypes', 'auth']) management.call_command('dumpdata', exclude=['contenttypes', 'auth'])

View File

@ -33,11 +33,6 @@ Django core exception classes are defined in ``django.core.exceptions``.
``_meta.get_field()`` method when the requested field does not exist on the ``_meta.get_field()`` method when the requested field does not exist on the
model or on the model's parents. model or on the model's parents.
.. versionchanged:: 1.8
This exception was previously defined only in
``django.db.models.fields`` and wasn't part of the public API.
``MultipleObjectsReturned`` ``MultipleObjectsReturned``
--------------------------- ---------------------------
@ -250,8 +245,6 @@ Exceptions provided by the ``django.test`` package.
.. exception:: client.RedirectCycleError .. exception:: client.RedirectCycleError
.. versionadded:: 1.8
:exc:`~client.RedirectCycleError` is raised when the test client detects a :exc:`~client.RedirectCycleError` is raised when the test client detects a
loop or an overly long chain of redirects. loop or an overly long chain of redirects.

View File

@ -53,15 +53,6 @@ The ``File`` Class
Iterate over the file yielding one line at a time. Iterate over the file yielding one line at a time.
.. versionchanged:: 1.8
``File`` now uses `universal newlines`_. The following are
recognized as ending a line: the Unix end-of-line convention
``'\n'``, the Windows convention ``'\r\n'``, and the old Macintosh
convention ``'\r'``.
.. _universal newlines: https://www.python.org/dev/peps/pep-0278
.. method:: chunks(chunk_size=None) .. method:: chunks(chunk_size=None)
Iterate over the file yielding "chunks" of a given size. ``chunk_size`` Iterate over the file yielding "chunks" of a given size. ``chunk_size``

View File

@ -86,10 +86,6 @@ Here are some useful attributes of ``UploadedFile``:
.. _universal newlines: https://www.python.org/dev/peps/pep-0278 .. _universal newlines: https://www.python.org/dev/peps/pep-0278
.. versionchanged:: 1.8
Previously lines were only split on the Unix end-of-line ``'\n'``.
Subclasses of ``UploadedFile`` include: Subclasses of ``UploadedFile`` include:
.. class:: TemporaryUploadedFile .. class:: TemporaryUploadedFile

View File

@ -185,8 +185,6 @@ Note that ``Form.add_error()`` automatically removes the relevant field from
.. method:: Form.has_error(field, code=None) .. method:: Form.has_error(field, code=None)
.. versionadded:: 1.8
This method returns a boolean designating whether a field has an error with This method returns a boolean designating whether a field has an error with
a specific error ``code``. If ``code`` is ``None``, it will return ``True`` a specific error ``code``. If ``code`` is ``None``, it will return ``True``
if the field contains any errors at all. if the field contains any errors at all.
@ -570,11 +568,6 @@ classes, as needed. The HTML will look something like::
>>> f['subject'].label_tag(attrs={'class': 'foo'}) >>> f['subject'].label_tag(attrs={'class': 'foo'})
<label for="id_subject" class="foo required">Subject:</label> <label for="id_subject" class="foo required">Subject:</label>
.. versionchanged:: 1.8
The ``required_css_class`` will also be added to the ``<label>`` tag as
seen above.
.. _ref-forms-api-configuring-label: .. _ref-forms-api-configuring-label:
Configuring form elements' HTML ``id`` attributes and ``<label>`` tags Configuring form elements' HTML ``id`` attributes and ``<label>`` tags
@ -693,8 +686,6 @@ Note that the label suffix is added only if the last character of the
label isn't a punctuation character (in English, those are ``.``, ``!``, ``?`` label isn't a punctuation character (in English, those are ``.``, ``!``, ``?``
or ``:``). or ``:``).
.. versionadded:: 1.8
Fields can also define their own :attr:`~django.forms.Field.label_suffix`. Fields can also define their own :attr:`~django.forms.Field.label_suffix`.
This will take precedence over :attr:`Form.label_suffix This will take precedence over :attr:`Form.label_suffix
<django.forms.Form.label_suffix>`. The suffix can also be overridden at runtime <django.forms.Form.label_suffix>`. The suffix can also be overridden at runtime
@ -990,10 +981,6 @@ Methods of ``BoundField``
fields. If you need to do this in a template, you could write a custom fields. If you need to do this in a template, you could write a custom
filter to allow passing parameters to ``label_tag``. filter to allow passing parameters to ``label_tag``.
.. versionchanged:: 1.8
The label includes :attr:`~Form.required_css_class` if applicable.
.. method:: BoundField.value() .. method:: BoundField.value()
Use this method to render the raw value of this field as it would be rendered Use this method to render the raw value of this field as it would be rendered

View File

@ -124,8 +124,6 @@ We've specified ``auto_id=False`` to simplify the output::
.. attribute:: Field.label_suffix .. attribute:: Field.label_suffix
.. versionadded:: 1.8
The ``label_suffix`` argument lets you override the form's The ``label_suffix`` argument lets you override the form's
:attr:`~django.forms.Form.label_suffix` on a per-field basis:: :attr:`~django.forms.Form.label_suffix` on a per-field basis::
@ -319,10 +317,6 @@ Checking if the field data has changed
.. method:: Field.has_changed() .. method:: Field.has_changed()
.. versionchanged:: 1.8
This method was renamed from ``_has_changed()``.
The ``has_changed()`` method is used to determine if the field value has changed The ``has_changed()`` method is used to determine if the field value has changed
from the initial value. Returns ``True`` or ``False``. from the initial value. Returns ``True`` or ``False``.
@ -412,10 +406,6 @@ For each field, we describe the default widget used if you don't specify
choices <field-choices>` for more details. If the argument is a choices <field-choices>` for more details. If the argument is a
callable, it is evaluated each time the field's form is initialized. callable, it is evaluated each time the field's form is initialized.
.. versionchanged:: 1.8
The ability to pass a callable to ``choices`` was added.
``TypedChoiceField`` ``TypedChoiceField``
~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
@ -561,8 +551,6 @@ For each field, we describe the default widget used if you don't specify
``DurationField`` ``DurationField``
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
.. versionadded:: 1.8
.. class:: DurationField(**kwargs) .. class:: DurationField(**kwargs)
* Default widget: :class:`TextInput` * Default widget: :class:`TextInput`
@ -708,11 +696,6 @@ For each field, we describe the default widget used if you don't specify
``UploadedFile.content_type`` will be updated with the image's content type ``UploadedFile.content_type`` will be updated with the image's content type
if Pillow can determine it, otherwise it will be set to ``None``. if Pillow can determine it, otherwise it will be set to ``None``.
.. versionchanged:: 1.8
The ``image`` and ``content_type`` attributes described in the last
paragraph were added.
.. _Pillow: http://pillow.readthedocs.org/en/latest/ .. _Pillow: http://pillow.readthedocs.org/en/latest/
.. _Image: https://pillow.readthedocs.org/en/latest/reference/Image.html .. _Image: https://pillow.readthedocs.org/en/latest/reference/Image.html
@ -922,8 +905,6 @@ For each field, we describe the default widget used if you don't specify
``UUIDField`` ``UUIDField``
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
.. versionadded:: 1.8
.. class:: UUIDField(**kwargs) .. class:: UUIDField(**kwargs)
* Default widget: :class:`TextInput` * Default widget: :class:`TextInput`

View File

@ -46,11 +46,6 @@ Model Form API reference. For introductory material about model forms, see the
information. Omitting any definition of the fields to use will result in information. Omitting any definition of the fields to use will result in
an :exc:`~django.core.exceptions.ImproperlyConfigured` exception. an :exc:`~django.core.exceptions.ImproperlyConfigured` exception.
.. versionchanged:: 1.8
Previously, omitting the list of fields was allowed and resulted in
a form with all fields of the model.
.. versionadded:: 1.9 .. versionadded:: 1.9
The ``field_classes`` keyword argument was added. The ``field_classes`` keyword argument was added.

View File

@ -206,8 +206,6 @@ foundation for custom widgets.
>>> name.render('name', 'A name') >>> name.render('name', 'A name')
'<input title="Your name" type="text" name="name" value="A name" size="10" />' '<input title="Your name" type="text" name="name" value="A name" size="10" />'
.. versionchanged:: 1.8
If you assign a value of ``True`` or ``False`` to an attribute, If you assign a value of ``True`` or ``False`` to an attribute,
it will be rendered as an HTML5 boolean attribute:: it will be rendered as an HTML5 boolean attribute::
@ -809,8 +807,6 @@ Composite widgets
.. attribute:: SelectDateWidget.empty_label .. attribute:: SelectDateWidget.empty_label
.. versionadded:: 1.8
If the :class:`~django.forms.DateField` is not required, If the :class:`~django.forms.DateField` is not required,
:class:`SelectDateWidget` will have an empty choice at the top of the :class:`SelectDateWidget` will have an empty choice at the top of the
list (which is ``---`` by default). You can change the text of this list (which is ``---`` by default). You can change the text of this

View File

@ -68,8 +68,6 @@ Adds a few conveniences for perfectionists:
.. attribute:: CommonMiddleware.response_redirect_class .. attribute:: CommonMiddleware.response_redirect_class
.. versionadded:: 1.8
Defaults to :class:`~django.http.HttpResponsePermanentRedirect`. Subclass Defaults to :class:`~django.http.HttpResponsePermanentRedirect`. Subclass
``CommonMiddleware`` and override the attribute to customize the redirects ``CommonMiddleware`` and override the attribute to customize the redirects
issued by the middleware. issued by the middleware.
@ -180,8 +178,6 @@ Security middleware
.. class:: SecurityMiddleware .. class:: SecurityMiddleware
.. versionadded:: 1.8
The ``django.middleware.security.SecurityMiddleware`` provides several security The ``django.middleware.security.SecurityMiddleware`` provides several security
enhancements to the request/response cycle. Each one can be independently enhancements to the request/response cycle. Each one can be independently
enabled or disabled with a setting. enabled or disabled with a setting.

View File

@ -60,10 +60,6 @@ inheriting from the standard ``models.Model``.
The first manager in the list will be the default manager for this model during The first manager in the list will be the default manager for this model during
migrations. migrations.
.. versionchanged:: 1.8
The ``managers`` argument was added.
DeleteModel DeleteModel
----------- -----------
@ -132,8 +128,6 @@ should be a dictionary mapping option names to values.
AlterModelManagers AlterModelManagers
------------------ ------------------
.. versionadded:: 1.8
.. class:: AlterModelManagers(name, managers) .. class:: AlterModelManagers(name, managers)
Alters the managers that are available during migrations. Alters the managers that are available during migrations.
@ -244,17 +238,8 @@ The optional ``hints`` argument will be passed as ``**hints`` to the
routing decisions. See :ref:`topics-db-multi-db-hints` for more details on routing decisions. See :ref:`topics-db-multi-db-hints` for more details on
database hints. database hints.
.. versionchanged:: 1.8
The ability to pass parameters to the ``sql`` and ``reverse_sql`` queries
was added.
The ``hints`` argument was added.
.. attribute:: RunSQL.noop .. attribute:: RunSQL.noop
.. versionadded:: 1.8
Pass the ``RunSQL.noop`` attribute to ``sql`` or ``reverse_sql`` when you Pass the ``RunSQL.noop`` attribute to ``sql`` or ``reverse_sql`` when you
want the operation not to do anything in the given direction. This is want the operation not to do anything in the given direction. This is
especially useful in making the operation reversible. especially useful in making the operation reversible.
@ -282,10 +267,6 @@ The optional ``hints`` argument will be passed as ``**hints`` to the
routing decision. See :ref:`topics-db-multi-db-hints` for more details on routing decision. See :ref:`topics-db-multi-db-hints` for more details on
database hints. database hints.
.. versionadded:: 1.8
The ``hints`` argument was added.
You are advised to write the code as a separate function above the ``Migration`` You are advised to write the code as a separate function above the ``Migration``
class in the migration file, and just pass it to ``RunPython``. Here's an class in the migration file, and just pass it to ``RunPython``. Here's an
example of using ``RunPython`` to create some initial objects on a ``Country`` example of using ``RunPython`` to create some initial objects on a ``Country``
@ -370,8 +351,6 @@ attribute.
.. staticmethod:: RunPython.noop .. staticmethod:: RunPython.noop
.. versionadded:: 1.8
Pass the ``RunPython.noop`` method to ``code`` or ``reverse_code`` when Pass the ``RunPython.noop`` method to ``code`` or ``reverse_code`` when
you want the operation not to do anything in the given direction. This is you want the operation not to do anything in the given direction. This is
especially useful in making the operation reversible. especially useful in making the operation reversible.

View File

@ -4,8 +4,6 @@ Conditional Expressions
.. currentmodule:: django.db.models.expressions .. currentmodule:: django.db.models.expressions
.. versionadded:: 1.8
Conditional expressions let you use :keyword:`if` ... :keyword:`elif` ... Conditional expressions let you use :keyword:`if` ... :keyword:`elif` ...
:keyword:`else` logic within filters, annotations, aggregations, and updates. A :keyword:`else` logic within filters, annotations, aggregations, and updates. A
conditional expression evaluates a series of conditions for each row of a conditional expression evaluates a series of conditions for each row of a

View File

@ -5,8 +5,6 @@ Database Functions
.. module:: django.db.models.functions .. module:: django.db.models.functions
:synopsis: Database Functions :synopsis: Database Functions
.. versionadded:: 1.8
The classes documented below provide a way for users to use functions provided The classes documented below provide a way for users to use functions provided
by the underlying database as annotations, aggregations, or filters in Django. by the underlying database as annotations, aggregations, or filters in Django.
Functions are also :doc:`expressions <expressions>`, so they can be used and Functions are also :doc:`expressions <expressions>`, so they can be used and

View File

@ -24,10 +24,6 @@ variables, and even other expressions.
Some examples Some examples
============= =============
.. versionchanged:: 1.8
Some of the examples rely on functionality that is new in Django 1.8.
.. code-block:: python .. code-block:: python
from django.db.models import F, Count from django.db.models import F, Count
@ -211,8 +207,6 @@ directly support ``output_field`` you will need to wrap the expression with
``Func()`` expressions ``Func()`` expressions
---------------------- ----------------------
.. versionadded:: 1.8
``Func()`` expressions are the base type of all expressions that involve ``Func()`` expressions are the base type of all expressions that involve
database functions like ``COALESCE`` and ``LOWER``, or aggregates like ``SUM``. database functions like ``COALESCE`` and ``LOWER``, or aggregates like ``SUM``.
They can be used directly:: They can be used directly::
@ -322,18 +316,9 @@ should define the desired ``output_field``. For example, adding an
``IntegerField()`` and a ``FloatField()`` together should probably have ``IntegerField()`` and a ``FloatField()`` together should probably have
``output_field=FloatField()`` defined. ``output_field=FloatField()`` defined.
.. versionchanged:: 1.8
``output_field`` is a new parameter.
The ``**extra`` kwargs are ``key=value`` pairs that can be interpolated The ``**extra`` kwargs are ``key=value`` pairs that can be interpolated
into the ``template`` attribute. into the ``template`` attribute.
.. versionadded:: 1.8
Aggregate functions can now use arithmetic and reference multiple
model fields in a single function.
Creating your own Aggregate Functions Creating your own Aggregate Functions
------------------------------------- -------------------------------------
@ -390,8 +375,6 @@ output value.
.. class:: ExpressionWrapper(expression, output_field) .. class:: ExpressionWrapper(expression, output_field)
.. versionadded:: 1.8
``ExpressionWrapper`` simply surrounds another expression and provides access ``ExpressionWrapper`` simply surrounds another expression and provides access
to properties, such as ``output_field``, that may not be available on other to properties, such as ``output_field``, that may not be available on other
expressions. ``ExpressionWrapper`` is necessary when using arithmetic on expressions. ``ExpressionWrapper`` is necessary when using arithmetic on
@ -401,8 +384,6 @@ expressions. ``ExpressionWrapper`` is necessary when using arithmetic on
Conditional expressions Conditional expressions
----------------------- -----------------------
.. versionadded:: 1.8
Conditional expressions allow you to use :keyword:`if` ... :keyword:`elif` ... Conditional expressions allow you to use :keyword:`if` ... :keyword:`elif` ...
:keyword:`else` logic in queries. Django natively supports SQL ``CASE`` :keyword:`else` logic in queries. Django natively supports SQL ``CASE``
expressions. For more details see :doc:`conditional-expressions`. expressions. For more details see :doc:`conditional-expressions`.
@ -410,8 +391,6 @@ expressions. For more details see :doc:`conditional-expressions`.
Raw SQL expressions Raw SQL expressions
------------------- -------------------
.. versionadded:: 1.8
.. currentmodule:: django.db.models.expressions .. currentmodule:: django.db.models.expressions
.. class:: RawSQL(sql, params, output_field=None) .. class:: RawSQL(sql, params, output_field=None)

View File

@ -228,11 +228,6 @@ The default value is used when new model instances are created and a value
isn't provided for the field. When the field is a primary key, the default is isn't provided for the field. When the field is a primary key, the default is
also used when the field is set to ``None``. also used when the field is set to ``None``.
.. versionchanged:: 1.8
The default wasn't used for ``None`` primary key values in previous
versions.
``editable`` ``editable``
------------ ------------
@ -574,8 +569,6 @@ when :attr:`~django.forms.Field.localize` is ``False`` or
``DurationField`` ``DurationField``
----------------- -----------------
.. versionadded:: 1.8
.. class:: DurationField(**options) .. class:: DurationField(**options)
A field for storing periods of time - modeled in Python by A field for storing periods of time - modeled in Python by
@ -597,11 +590,6 @@ SECOND(6)``. Otherwise a ``bigint`` of microseconds is used.
A :class:`CharField` that checks that the value is a valid email address. It A :class:`CharField` that checks that the value is a valid email address. It
uses :class:`~django.core.validators.EmailValidator` to validate the input. uses :class:`~django.core.validators.EmailValidator` to validate the input.
.. versionchanged:: 1.8
The default ``max_length`` was increased from 75 to 254 in order to be
compliant with RFC3696/5321.
``FileField`` ``FileField``
------------- -------------
@ -1079,8 +1067,6 @@ Like all :class:`CharField` subclasses, :class:`URLField` takes the optional
``UUIDField`` ``UUIDField``
------------- -------------
.. versionadded:: 1.8
.. class:: UUIDField(**options) .. class:: UUIDField(**options)
A field for storing universally unique identifiers. Uses Python's A field for storing universally unique identifiers. Uses Python's
@ -1757,8 +1743,6 @@ Field API reference
.. method:: from_db_value(value, expression, connection, context) .. method:: from_db_value(value, expression, connection, context)
.. versionadded:: 1.8
Converts a value as returned by the database to a Python object. It is Converts a value as returned by the database to a Python object. It is
the reverse of :meth:`get_prep_value`. the reverse of :meth:`get_prep_value`.
@ -1878,8 +1862,6 @@ Field API reference
Field attribute reference Field attribute reference
========================= =========================
.. versionadded:: 1.8
Every ``Field`` instance contains several attributes that allow Every ``Field`` instance contains several attributes that allow
introspecting its behavior. Use these attributes instead of ``isinstance`` introspecting its behavior. Use these attributes instead of ``isinstance``
checks when you need to write code that depends on a field's functionality. checks when you need to write code that depends on a field's functionality.

View File

@ -67,8 +67,6 @@ Customizing model loading
.. classmethod:: Model.from_db(db, field_names, values) .. classmethod:: Model.from_db(db, field_names, values)
.. versionadded:: 1.8
The ``from_db()`` method can be used to customize model instance creation The ``from_db()`` method can be used to customize model instance creation
when loading from the database. when loading from the database.
@ -121,8 +119,6 @@ Refreshing objects from database
.. method:: Model.refresh_from_db(using=None, fields=None, **kwargs) .. method:: Model.refresh_from_db(using=None, fields=None, **kwargs)
.. versionadded:: 1.8
If you need to reload a model's values from the database, you can use the If you need to reload a model's values from the database, you can use the
``refresh_from_db()`` method. When this method is called without arguments the ``refresh_from_db()`` method. When this method is called without arguments the
following is done: following is done:
@ -178,8 +174,6 @@ all of the instance's fields when a deferred field is reloaded::
.. method:: Model.get_deferred_fields() .. method:: Model.get_deferred_fields()
.. versionadded:: 1.8
A helper method that returns a set containing the attribute names of all those A helper method that returns a set containing the attribute names of all those
fields that are currently deferred for this model. fields that are currently deferred for this model.
@ -582,8 +576,6 @@ the data that's currently in the database.
Django version N+1. Pickles should not be used as part of a long-term Django version N+1. Pickles should not be used as part of a long-term
archival strategy. archival strategy.
.. versionadded:: 1.8
Since pickle compatibility errors can be difficult to diagnose, such as Since pickle compatibility errors can be difficult to diagnose, such as
silently corrupted objects, a ``RuntimeWarning`` is raised when you try to silently corrupted objects, a ``RuntimeWarning`` is raised when you try to
unpickle a model in a Django version that is different than the one in unpickle a model in a Django version that is different than the one in

View File

@ -141,8 +141,6 @@ Transform reference
.. attribute:: bilateral .. attribute:: bilateral
.. versionadded:: 1.8
A boolean indicating whether this transformation should apply to both A boolean indicating whether this transformation should apply to both
``lhs`` and ``rhs``. Bilateral transformations will be applied to ``rhs`` in ``lhs`` and ``rhs``. Bilateral transformations will be applied to ``rhs`` in
the same order as they appear in the lookup expression. By default it is set the same order as they appear in the lookup expression. By default it is set

View File

@ -18,15 +18,6 @@ Methods that it provides can be used to:
* Retrieve all field instances of a model * Retrieve all field instances of a model
* Retrieve a single field instance of a model by name * Retrieve a single field instance of a model by name
.. versionchanged:: 1.8
The Model ``_meta`` API has always existed as a Django internal, but
wasn't formally documented and supported. As part of the effort to
make this API public, some of the already existing API entry points
have changed slightly. A :ref:`migration guide <migrating-old-meta-api>`
has been provided to assist in converting your code to use the new,
official API.
.. _model-meta-field-api: .. _model-meta-field-api:
Field access API Field access API
@ -75,8 +66,6 @@ Retrieving all field instances of a model
.. method:: Options.get_fields(include_parents=True, include_hidden=False) .. method:: Options.get_fields(include_parents=True, include_hidden=False)
.. versionadded:: 1.8
Returns a tuple of fields associated with a model. ``get_fields()`` accepts Returns a tuple of fields associated with a model. ``get_fields()`` accepts
two parameters that can be used to control which fields are returned: two parameters that can be used to control which fields are returned:

View File

@ -100,8 +100,6 @@ Django quotes column and table names behind the scenes.
.. attribute:: Options.default_related_name .. attribute:: Options.default_related_name
.. versionadded:: 1.8
The name that will be used by default for the relation from a related object The name that will be used by default for the relation from a related object
back to this one. The default is ``<model_name>_set``. back to this one. The default is ``<model_name>_set``.

View File

@ -114,8 +114,6 @@ described here.
Django version N+1. Pickles should not be used as part of a long-term Django version N+1. Pickles should not be used as part of a long-term
archival strategy. archival strategy.
.. versionadded:: 1.8
Since pickle compatibility errors can be difficult to diagnose, such as Since pickle compatibility errors can be difficult to diagnose, such as
silently corrupted objects, a ``RuntimeWarning`` is raised when you try to silently corrupted objects, a ``RuntimeWarning`` is raised when you try to
unpickle a queryset in a Django version that is different than the one in unpickle a queryset in a Django version that is different than the one in
@ -230,12 +228,6 @@ reference to a field on the model (or any related models), or an aggregate
expression (averages, sums, etc) that has been computed over the objects that expression (averages, sums, etc) that has been computed over the objects that
are related to the objects in the ``QuerySet``. are related to the objects in the ``QuerySet``.
.. versionadded:: 1.8
Previous versions of Django only allowed aggregate functions to be used as
annotations. It is now possible to annotate a model with all kinds of
expressions.
Each argument to ``annotate()`` is an annotation that will be added Each argument to ``annotate()`` is an annotation that will be added
to each object in the ``QuerySet`` that is returned. to each object in the ``QuerySet`` that is returned.
@ -334,10 +326,6 @@ calling ``asc()`` or ``desc()`` on the expression::
Entry.objects.order_by(Coalesce('summary', 'headline').desc()) Entry.objects.order_by(Coalesce('summary', 'headline').desc())
.. versionadded:: 1.8
Ordering by query expressions was added.
Be cautious when ordering by fields in related models if you are also using Be cautious when ordering by fields in related models if you are also using
:meth:`distinct()`. See the note in :meth:`distinct` for an explanation of how :meth:`distinct()`. See the note in :meth:`distinct` for an explanation of how
related model ordering can change the expected results. related model ordering can change the expected results.
@ -381,10 +369,6 @@ ordering::
Entry.objects.order_by(Lower('headline').desc()) Entry.objects.order_by(Lower('headline').desc())
.. versionadded:: 1.8
The ability to order by expressions like ``Lower`` was added.
If you don't want any ordering to be applied to a query, not even the default If you don't want any ordering to be applied to a query, not even the default
ordering, call :meth:`order_by()` with no parameters. ordering, call :meth:`order_by()` with no parameters.
@ -1224,10 +1208,6 @@ of the arguments is required, but you should use at least one of them.
If you need to use a literal ``%s`` inside your select string, use If you need to use a literal ``%s`` inside your select string, use
the sequence ``%%s``. the sequence ``%%s``.
.. versionchanged:: 1.8
Prior to 1.8, you were unable to escape a literal ``%s``.
* ``where`` / ``tables`` * ``where`` / ``tables``
You can define explicit SQL ``WHERE`` clauses — perhaps to perform You can define explicit SQL ``WHERE`` clauses — perhaps to perform
@ -2868,21 +2848,12 @@ All aggregates have the following parameters in common:
A string that references a field on the model, or a :doc:`query expression A string that references a field on the model, or a :doc:`query expression
</ref/models/expressions>`. </ref/models/expressions>`.
.. versionadded:: 1.8
Aggregate functions are now able to reference multiple fields in complex
computations.
``output_field`` ``output_field``
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
An optional argument that represents the :doc:`model field </ref/models/fields>` An optional argument that represents the :doc:`model field </ref/models/fields>`
of the return value of the return value
.. versionadded:: 1.8
The ``output_field`` argument was added.
.. note:: .. note::
When combining multiple field types, Django can only determine the When combining multiple field types, Django can only determine the

View File

@ -208,8 +208,6 @@ All attributes should be considered read-only, unless stated otherwise below.
.. attribute:: HttpRequest.current_app .. attribute:: HttpRequest.current_app
.. versionadded:: 1.8
Not defined by Django itself, but if set, the :ttag:`url` template tag Not defined by Django itself, but if set, the :ttag:`url` template tag
will use its value as the ``current_app`` argument to will use its value as the ``current_app`` argument to
:func:`~django.core.urlresolvers.reverse()`. :func:`~django.core.urlresolvers.reverse()`.
@ -401,10 +399,6 @@ a subclass of dictionary. Exceptions are outlined here:
Strings for setting both keys and values will be converted from ``encoding`` Strings for setting both keys and values will be converted from ``encoding``
to unicode. If encoding is not set, it defaults to :setting:`DEFAULT_CHARSET`. to unicode. If encoding is not set, it defaults to :setting:`DEFAULT_CHARSET`.
.. versionchanged:: 1.8
In previous versions, ``query_string`` was a required positional argument.
.. method:: QueryDict.__getitem__(key) .. method:: QueryDict.__getitem__(key)
Returns the value for the given key. If the key has more than one value, Returns the value for the given key. If the key has more than one value,
@ -650,8 +644,6 @@ Attributes
.. attribute:: HttpResponse.charset .. attribute:: HttpResponse.charset
.. versionadded:: 1.8
A string denoting the charset in which the response will be encoded. If not A string denoting the charset in which the response will be encoded. If not
given at ``HttpResponse`` instantiation time, it will be extracted from given at ``HttpResponse`` instantiation time, it will be extracted from
``content_type`` and if that is unsuccessful, the ``content_type`` and if that is unsuccessful, the
@ -690,8 +682,6 @@ Attributes
.. attribute:: HttpResponse.closed .. attribute:: HttpResponse.closed
.. versionadded:: 1.8
``True`` if the response has been closed. ``True`` if the response has been closed.
Methods Methods
@ -722,10 +712,6 @@ Methods
given it will be extracted from ``content_type``, and if that given it will be extracted from ``content_type``, and if that
is unsuccessful, the :setting:`DEFAULT_CHARSET` setting will be used. is unsuccessful, the :setting:`DEFAULT_CHARSET` setting will be used.
.. versionadded:: 1.8
The ``charset`` parameter was added.
.. method:: HttpResponse.__setitem__(header, value) .. method:: HttpResponse.__setitem__(header, value)
Sets the given header name to the given value. Both ``header`` and Sets the given header name to the given value. Both ``header`` and
@ -747,8 +733,6 @@ Methods
.. method:: HttpResponse.setdefault(header, value) .. method:: HttpResponse.setdefault(header, value)
.. versionadded:: 1.8
Sets a header unless it has already been set. Sets a header unless it has already been set.
.. method:: HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False) .. method:: HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
@ -820,22 +804,16 @@ Methods
.. method:: HttpResponse.getvalue() .. method:: HttpResponse.getvalue()
.. versionadded:: 1.8
Returns the value of :attr:`HttpResponse.content`. This method makes Returns the value of :attr:`HttpResponse.content`. This method makes
an :class:`HttpResponse` instance a stream-like object. an :class:`HttpResponse` instance a stream-like object.
.. method:: HttpResponse.writable() .. method:: HttpResponse.writable()
.. versionadded:: 1.8
Always ``True``. This method makes an :class:`HttpResponse` instance a Always ``True``. This method makes an :class:`HttpResponse` instance a
stream-like object. stream-like object.
.. method:: HttpResponse.writelines(lines) .. method:: HttpResponse.writelines(lines)
.. versionadded:: 1.8
Writes a list of lines to the response. Line separators are not added. This Writes a list of lines to the response. Line separators are not added. This
method makes an :class:`HttpResponse` instance a stream-like object. method makes an :class:`HttpResponse` instance a stream-like object.

View File

@ -802,10 +802,6 @@ This is an Oracle-specific setting.
The name of the tablespace that will be used when running tests. If not The name of the tablespace that will be used when running tests. If not
provided, Django will use ``'test_' + USER``. provided, Django will use ``'test_' + USER``.
.. versionchanged:: 1.8
Previously Django used ``'test_' + NAME`` if not provided.
.. setting:: TEST_TBLSPACE_TMP .. setting:: TEST_TBLSPACE_TMP
TBLSPACE_TMP TBLSPACE_TMP
@ -818,17 +814,11 @@ This is an Oracle-specific setting.
The name of the temporary tablespace that will be used when running tests. If The name of the temporary tablespace that will be used when running tests. If
not provided, Django will use ``'test_' + USER + '_temp'``. not provided, Django will use ``'test_' + USER + '_temp'``.
.. versionchanged:: 1.8
Previously Django used ``'test_' + NAME + '_temp'`` if not provided.
.. setting:: DATAFILE .. setting:: DATAFILE
DATAFILE DATAFILE
^^^^^^^^ ^^^^^^^^
.. versionadded:: 1.8
Default: ``None`` Default: ``None``
This is an Oracle-specific setting. This is an Oracle-specific setting.
@ -841,8 +831,6 @@ use ``TBLSPACE + '.dbf'``.
DATAFILE_TMP DATAFILE_TMP
^^^^^^^^^^^^ ^^^^^^^^^^^^
.. versionadded:: 1.8
Default: ``None`` Default: ``None``
This is an Oracle-specific setting. This is an Oracle-specific setting.
@ -855,14 +843,8 @@ will use ``TBLSPACE_TMP + '.dbf'``.
DATAFILE_MAXSIZE DATAFILE_MAXSIZE
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
.. versionadded:: 1.8
Default: ``'500M'`` Default: ``'500M'``
.. versionchanged:: 1.8
The previous value was 200M and was not user customizable.
This is an Oracle-specific setting. This is an Oracle-specific setting.
The maximum size that the DATAFILE is allowed to grow to. The maximum size that the DATAFILE is allowed to grow to.
@ -872,14 +854,8 @@ The maximum size that the DATAFILE is allowed to grow to.
DATAFILE_TMP_MAXSIZE DATAFILE_TMP_MAXSIZE
^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
.. versionadded:: 1.8
Default: ``'500M'`` Default: ``'500M'``
.. versionchanged:: 1.8
The previous value was 200M and was not user customizable.
This is an Oracle-specific setting. This is an Oracle-specific setting.
The maximum size that the DATAFILE_TMP is allowed to grow to. The maximum size that the DATAFILE_TMP is allowed to grow to.
@ -1261,8 +1237,6 @@ exclusive, so only set one of those settings to ``True``.
EMAIL_SSL_CERTFILE EMAIL_SSL_CERTFILE
------------------ ------------------
.. versionadded:: 1.8
Default: ``None`` Default: ``None``
If :setting:`EMAIL_USE_SSL` or :setting:`EMAIL_USE_TLS` is ``True``, you can If :setting:`EMAIL_USE_SSL` or :setting:`EMAIL_USE_TLS` is ``True``, you can
@ -1274,8 +1248,6 @@ for the SSL connection.
EMAIL_SSL_KEYFILE EMAIL_SSL_KEYFILE
----------------- -----------------
.. versionadded:: 1.8
Default: ``None`` Default: ``None``
If :setting:`EMAIL_USE_SSL` or :setting:`EMAIL_USE_TLS` is ``True``, you can If :setting:`EMAIL_USE_SSL` or :setting:`EMAIL_USE_TLS` is ``True``, you can
@ -1293,8 +1265,6 @@ file and private key file are handled.
EMAIL_TIMEOUT EMAIL_TIMEOUT
------------- -------------
.. versionadded:: 1.8
Default: ``None`` Default: ``None``
Specifies a timeout in seconds for blocking operations like the connection Specifies a timeout in seconds for blocking operations like the connection
@ -1463,8 +1433,6 @@ like::
__init__.py __init__.py
formats.py formats.py
.. versionchanged:: 1.8
You can also set this setting to a list of Python paths, for example:: You can also set this setting to a list of Python paths, for example::
FORMAT_MODULE_PATH = [ FORMAT_MODULE_PATH = [
@ -1472,10 +1440,10 @@ like::
'some_app.formats', 'some_app.formats',
] ]
When Django searches for a certain format, it will go through all given When Django searches for a certain format, it will go through all given Python
Python paths until it finds a module that actually defines the given paths until it finds a module that actually defines the given format. This
format. This means that formats defined in packages farther up in the list means that formats defined in packages farther up in the list will take
will take precedence over the same formats in packages farther down. precedence over the same formats in packages farther down.
Available formats are :setting:`DATE_FORMAT`, :setting:`TIME_FORMAT`, Available formats are :setting:`DATE_FORMAT`, :setting:`TIME_FORMAT`,
:setting:`DATETIME_FORMAT`, :setting:`YEAR_MONTH_FORMAT`, :setting:`DATETIME_FORMAT`, :setting:`YEAR_MONTH_FORMAT`,
@ -1580,10 +1548,6 @@ It serves two purposes:
site. It also provides the fallback translation when a translation for a site. It also provides the fallback translation when a translation for a
given literal doesn't exist for the user's preferred language. given literal doesn't exist for the user's preferred language.
.. versionchanged:: 1.8
The fallback for translation literals was added.
See :ref:`how-django-discovers-language-preference` for more details. See :ref:`how-django-discovers-language-preference` for more details.
.. _list of language identifiers: http://www.i18nguy.com/unicode/language-identifiers.html .. _list of language identifiers: http://www.i18nguy.com/unicode/language-identifiers.html
@ -1967,8 +1931,6 @@ affect them.
SECURE_BROWSER_XSS_FILTER SECURE_BROWSER_XSS_FILTER
------------------------- -------------------------
.. versionadded:: 1.8
Default: ``False`` Default: ``False``
If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` sets If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` sets
@ -1979,8 +1941,6 @@ the :ref:`x-xss-protection` header on all responses that do not already have it.
SECURE_CONTENT_TYPE_NOSNIFF SECURE_CONTENT_TYPE_NOSNIFF
--------------------------- ---------------------------
.. versionadded:: 1.8
Default: ``False`` Default: ``False``
If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` If ``True``, the :class:`~django.middleware.security.SecurityMiddleware`
@ -1992,8 +1952,6 @@ already have it.
SECURE_HSTS_INCLUDE_SUBDOMAINS SECURE_HSTS_INCLUDE_SUBDOMAINS
------------------------------ ------------------------------
.. versionadded:: 1.8
Default: ``False`` Default: ``False``
If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` adds If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` adds
@ -2011,8 +1969,6 @@ non-zero value.
SECURE_HSTS_SECONDS SECURE_HSTS_SECONDS
------------------- -------------------
.. versionadded:: 1.8
Default: ``0`` Default: ``0``
If set to a non-zero integer value, the If set to a non-zero integer value, the
@ -2090,8 +2046,6 @@ available in ``request.META``.)
SECURE_REDIRECT_EXEMPT SECURE_REDIRECT_EXEMPT
---------------------- ----------------------
.. versionadded:: 1.8
Default: ``[]`` (Empty list) Default: ``[]`` (Empty list)
If a URL path matches a regular expression in this list, the request will not be If a URL path matches a regular expression in this list, the request will not be
@ -2103,8 +2057,6 @@ setting has no effect.
SECURE_SSL_HOST SECURE_SSL_HOST
--------------- ---------------
.. versionadded:: 1.8
Default: ``None`` Default: ``None``
If a string (e.g. ``secure.example.com``), all SSL redirects will be directed If a string (e.g. ``secure.example.com``), all SSL redirects will be directed
@ -2117,8 +2069,6 @@ setting has no effect.
SECURE_SSL_REDIRECT SECURE_SSL_REDIRECT
------------------- -------------------
.. versionadded:: 1.8
Default: ``False``. Default: ``False``.
If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` If ``True``, the :class:`~django.middleware.security.SecurityMiddleware`
@ -2225,8 +2175,6 @@ See also the :doc:`/ref/checks` documentation.
TEMPLATES TEMPLATES
--------- ---------
.. versionadded:: 1.8
Default: ``[]`` (Empty list) Default: ``[]`` (Empty list)
A list containing the settings for all template engines to be used with A list containing the settings for all template engines to be used with

View File

@ -496,10 +496,6 @@ Arguments sent with this signal:
``environ`` ``environ``
The ``environ`` dictionary provided to the request. The ``environ`` dictionary provided to the request.
.. versionchanged:: 1.8
The ``environ`` argument was added.
request_finished request_finished
---------------- ----------------
@ -562,10 +558,6 @@ distinguish between the two.
You can also import this signal from ``django.core.signals`` to avoid importing You can also import this signal from ``django.core.signals`` to avoid importing
from ``django.test`` in non-test situations. from ``django.test`` in non-test situations.
.. versionchanged:: 1.8
The signal was moved to ``django.core.signals`` as described above.
Arguments sent with this signal: Arguments sent with this signal:
``sender`` ``sender``

View File

@ -90,10 +90,6 @@ Methods
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
loading the template. loading the template.
.. versionchanged:: 1.8
The ``charset`` and ``using`` parameters were added.
.. method:: SimpleTemplateResponse.resolve_context(context) .. method:: SimpleTemplateResponse.resolve_context(context)
Preprocesses context data that will be used for rendering a template. Preprocesses context data that will be used for rendering a template.
@ -189,10 +185,6 @@ Methods
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
loading the template. loading the template.
.. versionchanged:: 1.8
The ``charset`` and ``using`` parameters were added.
The rendering process The rendering process
===================== =====================

View File

@ -50,8 +50,6 @@ what's passed by :class:`~django.template.backends.django.DjangoTemplates`.
.. class:: Engine(dirs=None, app_dirs=False, context_processors=None, debug=False, loaders=None, string_if_invalid='', file_charset='utf-8', libraries=None, builtins=None) .. class:: Engine(dirs=None, app_dirs=False, context_processors=None, debug=False, loaders=None, string_if_invalid='', file_charset='utf-8', libraries=None, builtins=None)
.. versionadded:: 1.8
When instantiating an ``Engine`` all arguments must be passed as keyword When instantiating an ``Engine`` all arguments must be passed as keyword
arguments: arguments:
@ -600,12 +598,6 @@ processors::
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
] ]
.. versionchanged:: 1.8
Built-in template context processors were moved from
``django.core.context_processors`` to
``django.template.context_processors`` in Django 1.8.
In addition to these, :class:`RequestContext` always enables In addition to these, :class:`RequestContext` always enables
``'django.template.context_processors.csrf'``. This is a security related ``'django.template.context_processors.csrf'``. This is a security related
context processor required by the admin and other contrib apps, and, in case context processor required by the admin and other contrib apps, and, in case
@ -774,10 +766,6 @@ way of specifying template directories is by using the :setting:`DIRS
The :setting:`DIRS <TEMPLATES-DIRS>` option The :setting:`DIRS <TEMPLATES-DIRS>` option
------------------------------------------- -------------------------------------------
.. versionchanged:: 1.8
This value used to be defined by the ``TEMPLATE_DIRS`` setting.
Tell Django what your template directories are by using the :setting:`DIRS Tell Django what your template directories are by using the :setting:`DIRS
<TEMPLATES-DIRS>` option in the :setting:`TEMPLATES` setting in your settings <TEMPLATES-DIRS>` option in the :setting:`TEMPLATES` setting in your settings
file — or the ``dirs`` argument of :class:`~django.template.Engine`. This file — or the ``dirs`` argument of :class:`~django.template.Engine`. This
@ -932,8 +920,6 @@ loaders that come with Django:
``django.template.loaders.locmem.Loader`` ``django.template.loaders.locmem.Loader``
.. versionadded:: 1.8
.. class:: locmem.Loader .. class:: locmem.Loader
Loads templates from a Python dictionary. This is useful for testing. Loads templates from a Python dictionary. This is useful for testing.

View File

@ -777,10 +777,6 @@ output (as a string) inside a variable. This is useful if you want to use
{% now "Y" as current_year %} {% now "Y" as current_year %}
{% blocktrans %}Copyright {{ current_year }}{% endblocktrans %} {% blocktrans %}Copyright {{ current_year }}{% endblocktrans %}
.. versionadded:: 1.8
The ability to use the "as" syntax was added.
.. templatetag:: regroup .. templatetag:: regroup
regroup regroup
@ -1679,10 +1675,7 @@ For example::
If ``value`` is ``['a', 'b', 'c', 'd']`` or ``"abcd"``, the output will be If ``value`` is ``['a', 'b', 'c', 'd']`` or ``"abcd"``, the output will be
``4``. ``4``.
.. versionchanged:: 1.8 The filter returns ``0`` for an undefined variable.
The filter returns ``0`` for an undefined variable. Previously, it returned
an empty string.
.. templatefilter:: length_is .. templatefilter:: length_is
@ -2239,12 +2232,6 @@ It also supports domain-only links ending in one of the original top level
domains (``.com``, ``.edu``, ``.gov``, ``.int``, ``.mil``, ``.net``, and domains (``.com``, ``.edu``, ``.gov``, ``.int``, ``.mil``, ``.net``, and
``.org``). For example, ``djangoproject.com`` gets converted. ``.org``). For example, ``djangoproject.com`` gets converted.
.. versionchanged:: 1.8
Support for domain-only links that include characters after the top-level
domain (e.g. ``djangoproject.com/`` and ``djangoproject.com/download/``)
was added.
Links can have trailing punctuation (periods, commas, close-parens) and leading Links can have trailing punctuation (periods, commas, close-parens) and leading
punctuation (opening parens), and ``urlize`` will still do the right thing. punctuation (opening parens), and ``urlize`` will still do the right thing.

View File

@ -18,11 +18,6 @@ Helper function to return a URL pattern for serving files in debug mode::
# ... the rest of your URLconf goes here ... # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
.. versionchanged:: 1.8
The ``view`` argument changed from a string
(``'django.views.static.serve'``) to the function.
url() url()
----- -----

View File

@ -138,8 +138,6 @@ The functions defined in this module share the following properties:
.. function:: parse_duration(value) .. function:: parse_duration(value)
.. versionadded:: 1.8
Parses a string and returns a :class:`datetime.timedelta`. Parses a string and returns a :class:`datetime.timedelta`.
Expects data in the format ``"DD HH:MM:SS.uuuuuu"`` or as specified by ISO Expects data in the format ``"DD HH:MM:SS.uuuuuu"`` or as specified by ISO
@ -277,8 +275,6 @@ The functions defined in this module share the following properties:
.. function:: uri_to_iri(uri) .. function:: uri_to_iri(uri)
.. versionadded:: 1.8
Converts a Uniform Resource Identifier into an Internationalized Resource Converts a Uniform Resource Identifier into an Internationalized Resource
Identifier. Identifier.
@ -301,8 +297,6 @@ The functions defined in this module share the following properties:
.. function:: escape_uri_path(path) .. function:: escape_uri_path(path)
.. versionadded:: 1.8
Escapes the unsafe characters from the path portion of a Uniform Resource Escapes the unsafe characters from the path portion of a Uniform Resource
Identifier (URI). Identifier (URI).
@ -510,8 +504,6 @@ Atom1Feed
database by some other process in the brief interval between subsequent database by some other process in the brief interval between subsequent
invocations of a method on the same instance. invocations of a method on the same instance.
.. versionadded:: 1.8
You can use the ``name`` argument to make cached properties of other You can use the ``name`` argument to make cached properties of other
methods. For example, if you had an expensive ``get_friends()`` method and methods. For example, if you had an expensive ``get_friends()`` method and
wanted to allow calling it without retrieving the cached value, you could wanted to allow calling it without retrieving the cached value, you could
@ -657,8 +649,6 @@ escaping HTML.
.. function:: html_safe() .. function:: html_safe()
.. versionadded:: 1.8
The ``__html__()`` method on a class helps non-Django templates detect The ``__html__()`` method on a class helps non-Django templates detect
classes whose output doesn't require HTML escaping. classes whose output doesn't require HTML escaping.
@ -916,9 +906,7 @@ appropriate entities.
``None``, the :ref:`current time zone <default-current-time-zone>` is unset ``None``, the :ref:`current time zone <default-current-time-zone>` is unset
on entry with :func:`deactivate()` instead. on entry with :func:`deactivate()` instead.
.. versionchanged:: 1.8 ``override`` is also usable as a function decorator.
``override`` is now usable as a function decorator.
.. function:: localtime(value, timezone=None) .. function:: localtime(value, timezone=None)
@ -979,10 +967,6 @@ appropriate entities.
``is_dst`` has no effect when ``pytz`` is not installed. ``is_dst`` has no effect when ``pytz`` is not installed.
.. versionchanged:: 1.8
In older versions of Django, ``timezone`` was a required argument.
.. versionchanged:: 1.9 .. versionchanged:: 1.9
The ``is_dst`` argument was added. The ``is_dst`` argument was added.
@ -994,10 +978,6 @@ appropriate entities.
aware :class:`~datetime.datetime`. If ``timezone`` is set to ``None``, it aware :class:`~datetime.datetime`. If ``timezone`` is set to ``None``, it
defaults to the :ref:`current time zone <default-current-time-zone>`. defaults to the :ref:`current time zone <default-current-time-zone>`.
.. versionchanged:: 1.8
In older versions of Django, ``timezone`` was a required argument.
.. _pytz: http://pytz.sourceforge.net/ .. _pytz: http://pytz.sourceforge.net/
``django.utils.translation`` ``django.utils.translation``
@ -1095,9 +1075,7 @@ For a complete discussion on the usage of the following see the
is ``True``. If you pass ``None`` as the language argument, a is ``True``. If you pass ``None`` as the language argument, a
``NullTranslations()`` instance is activated within the context. ``NullTranslations()`` instance is activated within the context.
.. versionchanged:: 1.8 ``override`` is also usable as a function decorator.
``override`` is now usable as a function decorator.
.. function:: get_language() .. function:: get_language()
@ -1105,11 +1083,6 @@ For a complete discussion on the usage of the following see the
translations are temporarily deactivated (by :func:`deactivate_all()` or translations are temporarily deactivated (by :func:`deactivate_all()` or
when ``None`` is passed to :func:`override()`). when ``None`` is passed to :func:`override()`).
.. versionchanged:: 1.8
Before Django 1.8, ``get_language()`` always returned
:setting:`LANGUAGE_CODE` when translations were deactivated.
.. function:: get_language_bidi() .. function:: get_language_bidi()
Returns selected language's BiDi layout: Returns selected language's BiDi layout:

View File

@ -163,11 +163,6 @@ to, or in lieu of custom ``field.clean()`` methods.
.. _valid URI schemes: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml .. _valid URI schemes: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
.. versionchanged:: 1.8
Support for IPv6 addresses, unicode domains, and URLs containing
authentication data was added.
``validate_email`` ``validate_email``
------------------ ------------------
@ -242,10 +237,6 @@ to, or in lieu of custom ``field.clean()`` methods.
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
``'max_value'`` if ``value`` is greater than ``max_value``. ``'max_value'`` if ``value`` is greater than ``max_value``.
.. versionchanged:: 1.8
The ``message`` parameter was added.
``MinValueValidator`` ``MinValueValidator``
--------------------- ---------------------
@ -254,10 +245,6 @@ to, or in lieu of custom ``field.clean()`` methods.
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
``'min_value'`` if ``value`` is less than ``min_value``. ``'min_value'`` if ``value`` is less than ``min_value``.
.. versionchanged:: 1.8
The ``message`` parameter was added.
``MaxLengthValidator`` ``MaxLengthValidator``
---------------------- ----------------------
@ -266,10 +253,6 @@ to, or in lieu of custom ``field.clean()`` methods.
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
``'max_length'`` if the length of ``value`` is greater than ``max_length``. ``'max_length'`` if the length of ``value`` is greater than ``max_length``.
.. versionchanged:: 1.8
The ``message`` parameter was added.
``MinLengthValidator`` ``MinLengthValidator``
---------------------- ----------------------
@ -278,10 +261,6 @@ to, or in lieu of custom ``field.clean()`` methods.
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
``'min_length'`` if the length of ``value`` is less than ``min_length``. ``'min_length'`` if the length of ``value`` is less than ``min_length``.
.. versionchanged:: 1.8
The ``message`` parameter was added.
``DecimalValidator`` ``DecimalValidator``
-------------------- --------------------

View File

@ -77,11 +77,6 @@ but a few of the key features are:
:ref:`ForeignKey <ref-foreignkey>` or :ref:`ManyToManyField <ref-manytomany>` :ref:`ForeignKey <ref-foreignkey>` or :ref:`ManyToManyField <ref-manytomany>`
to) apps with migrations. to) apps with migrations.
* If you are upgrading from South, see our :ref:`upgrading-from-south`
documentation, and third-party app authors should read the
`South 1.0 release notes <http://south.readthedocs.org/en/latest/releasenotes/1.0.html#library-migration-path>`_
for details on how to support South and Django migrations simultaneously.
.. _app-loading-refactor-17-release-note: .. _app-loading-refactor-17-release-note:
App-loading refactor App-loading refactor

View File

@ -180,13 +180,10 @@ The permissions given to the user will be the superset of all permissions
returned by all backends. That is, Django grants a permission to a user that returned by all backends. That is, Django grants a permission to a user that
any one backend grants. any one backend grants.
.. versionadded:: 1.8
If a backend raises a :class:`~django.core.exceptions.PermissionDenied` If a backend raises a :class:`~django.core.exceptions.PermissionDenied`
exception in :meth:`~django.contrib.auth.models.User.has_perm()` or exception in :meth:`~django.contrib.auth.models.User.has_perm()` or
:meth:`~django.contrib.auth.models.User.has_module_perms()`, :meth:`~django.contrib.auth.models.User.has_module_perms()`, the authorization
the authorization will immediately fail and Django will immediately fail and Django won't check the backends that follow.
won't check the backends that follow.
The simple backend above could implement permissions for the magic admin The simple backend above could implement permissions for the magic admin
fairly simply:: fairly simply::
@ -494,11 +491,6 @@ Django expects your custom User model to meet some minimum requirements.
what these two methods return - if you want, they can return exactly what these two methods return - if you want, they can return exactly
the same value. the same value.
.. versionchanged:: 1.8
Older versions of Django required your model to have an integer primary
key as well.
The easiest way to construct a compliant custom User model is to inherit from The easiest way to construct a compliant custom User model is to inherit from
:class:`~django.contrib.auth.models.AbstractBaseUser`. :class:`~django.contrib.auth.models.AbstractBaseUser`.
:class:`~django.contrib.auth.models.AbstractBaseUser` provides the core :class:`~django.contrib.auth.models.AbstractBaseUser` provides the core
@ -526,8 +518,6 @@ password resets. You must then provide some key implementation details:
... ...
USERNAME_FIELD = 'identifier' USERNAME_FIELD = 'identifier'
.. versionadded:: 1.8
:attr:`USERNAME_FIELD` now supports :attr:`USERNAME_FIELD` now supports
:class:`~django.db.models.ForeignKey`\s. Since there is no way to pass :class:`~django.db.models.ForeignKey`\s. Since there is no way to pass
model instances during the :djadmin:`createsuperuser` prompt, expect the model instances during the :djadmin:`createsuperuser` prompt, expect the
@ -562,8 +552,6 @@ password resets. You must then provide some key implementation details:
``User`` model, but should *not* contain the ``USERNAME_FIELD`` or ``User`` model, but should *not* contain the ``USERNAME_FIELD`` or
``password`` as these fields will always be prompted for. ``password`` as these fields will always be prompted for.
.. versionadded:: 1.8
:attr:`REQUIRED_FIELDS` now supports :attr:`REQUIRED_FIELDS` now supports
:class:`~django.db.models.ForeignKey`\s. Since there is no way to pass :class:`~django.db.models.ForeignKey`\s. Since there is no way to pass
model instances during the :djadmin:`createsuperuser` prompt, expect the model instances during the :djadmin:`createsuperuser` prompt, expect the

View File

@ -1516,8 +1516,6 @@ provides several built-in forms located in :mod:`django.contrib.auth.forms`:
.. method:: send_email(subject_template_name, email_template_name, context, from_email, to_email, html_email_template_name=None) .. method:: send_email(subject_template_name, email_template_name, context, from_email, to_email, html_email_template_name=None)
.. versionadded:: 1.8
Uses the arguments to send an ``EmailMultiAlternatives``. Uses the arguments to send an ``EmailMultiAlternatives``.
Can be overridden to customize how the email is sent to the user. Can be overridden to customize how the email is sent to the user.

View File

@ -99,8 +99,6 @@ make the following call::
# ... perform compatibility checks and collect errors # ... perform compatibility checks and collect errors
return errors return errors
.. versionadded:: 1.8
You can register "deployment checks" that are only relevant to a production You can register "deployment checks" that are only relevant to a production
settings file like this:: settings file like this::
@ -121,10 +119,6 @@ The code below is equivalent to the code above::
... ...
register(my_check, Tags.security, deploy=True) register(my_check, Tags.security, deploy=True)
.. versionchanged:: 1.8
The ability to use register as a function was added.
.. _field-checking: .. _field-checking:
Field, Model, and Manager checks Field, Model, and Manager checks

View File

@ -143,16 +143,6 @@ If you specify both the :attr:`~django.views.generic.edit.ModelFormMixin.fields`
and :attr:`~django.views.generic.edit.FormMixin.form_class` attributes, an and :attr:`~django.views.generic.edit.FormMixin.form_class` attributes, an
:exc:`~django.core.exceptions.ImproperlyConfigured` exception will be raised. :exc:`~django.core.exceptions.ImproperlyConfigured` exception will be raised.
.. versionchanged:: 1.8
Omitting the ``fields`` attribute was previously allowed and resulted in a
form with all of the model's fields.
.. versionchanged:: 1.8
Previously if both ``fields`` and ``form_class`` were specified,
``fields`` was silently ignored.
Finally, we hook these new views into the URLconf: Finally, we hook these new views into the URLconf:
.. snippet:: .. snippet::

View File

@ -33,11 +33,6 @@ returned.
When you need more fine-grained control you may use per-view conditional When you need more fine-grained control you may use per-view conditional
processing functions. processing functions.
.. versionchanged:: 1.8
Support for the ``If-unmodified-since`` header was added to conditional
view processing.
.. _conditional-decorators: .. _conditional-decorators:
The ``condition`` decorator The ``condition`` decorator

View File

@ -60,13 +60,6 @@ raises ``ValueError``::
... ...
ValueError: save() prohibited to prevent data loss due to unsaved related object 'reporter'. ValueError: save() prohibited to prevent data loss due to unsaved related object 'reporter'.
.. versionchanged:: 1.8.4
Previously, saving an object with unsaved related objects did not raise an
error and could result in silent data loss. In 1.8-1.8.3, unsaved model
instances couldn't be assigned to related fields, but this restriction was
removed to allow easier usage of in-memory models.
Article objects have access to their related Reporter objects:: Article objects have access to their related Reporter objects::
>>> r = a.reporter >>> r = a.reporter

View File

@ -101,13 +101,6 @@ raises ``ValueError``::
... ...
ValueError: save() prohibited to prevent data loss due to unsaved related object 'place'. ValueError: save() prohibited to prevent data loss due to unsaved related object 'place'.
.. versionchanged:: 1.8.4
Previously, saving an object with unsaved related objects did not raise an
error and could result in silent data loss. In 1.8-1.8.3, unsaved model
instances couldn't be assigned to related fields, but this restriction was
removed to allow easier usage of in-memory models.
Restaurant.objects.all() just returns the Restaurants, not the Places. Note Restaurant.objects.all() just returns the Restaurants, not the Places. Note
that there are two restaurants - Ace Hardware the Restaurant was created in the that there are two restaurants - Ace Hardware the Restaurant was created in the
call to r.place = p2:: call to r.place = p2::

View File

@ -202,11 +202,6 @@ Django provides a single API to control database transactions.
You may use ``atomic`` when autocommit is turned off. It will only use You may use ``atomic`` when autocommit is turned off. It will only use
savepoints, even for the outermost block. savepoints, even for the outermost block.
.. versionchanged:: 1.8.5
Previously the outermost atomic block couldn't be declared with
``savepoint=False`` when autocommit was turned off.
.. admonition:: Performance considerations .. admonition:: Performance considerations
Open transactions have a performance cost for your database server. To Open transactions have a performance cost for your database server. To

View File

@ -277,10 +277,6 @@ All parameters are optional and can be set at any time prior to calling the
* ``reply_to``: A list or tuple of recipient addresses used in the "Reply-To" * ``reply_to``: A list or tuple of recipient addresses used in the "Reply-To"
header when sending the email. header when sending the email.
.. versionchanged:: 1.8
The ``reply_to`` parameter was added.
For example:: For example::
email = EmailMessage('Hello', 'Body goes here', 'from@example.com', email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
@ -412,10 +408,6 @@ It can also be used as a context manager, which will automatically call
mail.EmailMessage(subject2, body2, from2, [to2], mail.EmailMessage(subject2, body2, from2, [to2],
connection=connection).send() connection=connection).send()
.. versionadded:: 1.8
The context manager protocol was added.
Obtaining an instance of an email backend Obtaining an instance of an email backend
----------------------------------------- -----------------------------------------
@ -472,12 +464,6 @@ SMTP backend
If unspecified, the default ``timeout`` will be the one provided by If unspecified, the default ``timeout`` will be the one provided by
:func:`socket.getdefaulttimeout()`, which defaults to ``None`` (no timeout). :func:`socket.getdefaulttimeout()`, which defaults to ``None`` (no timeout).
.. versionchanged:: 1.8
The ``ssl_keyfile``, and ``ssl_certfile`` parameters and corresponding
settings were added. The ability to customize ``timeout`` using
a setting (:setting:`EMAIL_TIMEOUT`) was added.
.. _topic-email-console-backend: .. _topic-email-console-backend:
Console backend Console backend

View File

@ -615,10 +615,6 @@ errors. For example, ``{{ form.non_field_errors }}`` would look like:
<li>Generic validation error</li> <li>Generic validation error</li>
</ul> </ul>
.. versionchanged:: 1.8
The ``nonfield`` class as described in the example above was added.
See :doc:`/ref/forms/api` for more on errors, styling, and working with form See :doc:`/ref/forms/api` for more on errors, styling, and working with form
attributes in templates. attributes in templates.

View File

@ -436,12 +436,6 @@ In addition, Django applies the following rule: if you set ``editable=False`` on
the model field, *any* form created from the model via ``ModelForm`` will not the model field, *any* form created from the model via ``ModelForm`` will not
include that field. include that field.
.. versionchanged:: 1.8
In older versions, omitting both ``fields`` and ``exclude`` resulted in
a form with all the model's fields. Doing this now raises an
:exc:`~django.core.exceptions.ImproperlyConfigured` exception.
.. note:: .. note::
Any fields not included in a form by the above logic Any fields not included in a form by the above logic
@ -745,12 +739,6 @@ exclude::
>>> AuthorFormSet = modelformset_factory(Author, exclude=('birth_date',)) >>> AuthorFormSet = modelformset_factory(Author, exclude=('birth_date',))
.. versionchanged:: 1.8
In older versions, omitting both ``fields`` and ``exclude`` resulted in
a formset with all the model's fields. Doing this now raises an
:exc:`~django.core.exceptions.ImproperlyConfigured` exception.
This will create a formset that is capable of working with the data associated This will create a formset that is capable of working with the data associated
with the ``Author`` model. It works just like a regular formset:: with the ``Author`` model. It works just like a regular formset::

View File

@ -273,11 +273,6 @@ that piece of middleware from the middleware process and a debug message will
be logged to the ``django.request`` logger when :setting:`DEBUG` is set to be logged to the ``django.request`` logger when :setting:`DEBUG` is set to
``True``. ``True``.
.. versionchanged:: 1.8
Previously, :exc:`~django.core.exceptions.MiddlewareNotUsed` exceptions
weren't logged.
Guidelines Guidelines
---------- ----------

View File

@ -226,12 +226,6 @@ You can edit it multiple times.
can't be accessed again from the user's browser (for example, the can't be accessed again from the user's browser (for example, the
:func:`django.contrib.auth.logout()` function calls it). :func:`django.contrib.auth.logout()` function calls it).
.. versionchanged:: 1.8
Deletion of the session cookie is a behavior new in Django 1.8.
Previously, the behavior was to regenerate the session key value that
was sent back to the user in the cookie.
.. method:: set_test_cookie() .. method:: set_test_cookie()
Sets a test cookie to determine whether the user's browser supports Sets a test cookie to determine whether the user's browser supports

View File

@ -56,10 +56,6 @@ Optional arguments
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
loading the template. loading the template.
.. versionchanged:: 1.8
The ``using`` parameter was added.
Example Example
------- -------
@ -121,10 +117,6 @@ Optional arguments
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
loading the template. loading the template.
.. versionchanged:: 1.8
The ``status`` and ``using`` parameters were added.
Example Example
------- -------

View File

@ -154,12 +154,6 @@ Django provides format definitions for many locales, but sometimes you might
want to create your own, because a format files doesn't exist for your locale, want to create your own, because a format files doesn't exist for your locale,
or because you want to overwrite some of the values. or because you want to overwrite some of the values.
.. versionchanged:: 1.8
The ability to specify :setting:`FORMAT_MODULE_PATH` as a list was added.
Previously, only a single string value was supported.
To use custom formats, specify the path where you'll place format files To use custom formats, specify the path where you'll place format files
first. To do that, just set your :setting:`FORMAT_MODULE_PATH` setting to first. To do that, just set your :setting:`FORMAT_MODULE_PATH` setting to
the package where format files will exist, for instance:: the package where format files will exist, for instance::

View File

@ -872,10 +872,6 @@ If you enable the ``django.template.context_processors.i18n`` context processor
then each ``RequestContext`` will have access to ``LANGUAGES``, then each ``RequestContext`` will have access to ``LANGUAGES``,
``LANGUAGE_CODE``, and ``LANGUAGE_BIDI`` as defined above. ``LANGUAGE_CODE``, and ``LANGUAGE_BIDI`` as defined above.
.. versionchanged:: 1.8
The ``i18n`` context processor is not enabled by default for new projects.
.. templatetag:: get_language_info .. templatetag:: get_language_info
``get_language_info`` ``get_language_info``

View File

@ -623,8 +623,6 @@ Python logging module.
.. method:: send_mail(subject, message, *args, **kwargs) .. method:: send_mail(subject, message, *args, **kwargs)
.. versionadded:: 1.8
Sends emails to admin users. To customize this behavior, you can Sends emails to admin users. To customize this behavior, you can
subclass the :class:`~django.utils.log.AdminEmailHandler` class and subclass the :class:`~django.utils.log.AdminEmailHandler` class and
override this method. override this method.

View File

@ -140,8 +140,6 @@ developers (or your production servers) check out the code, they'll
get both the changes to your models and the accompanying migration at the get both the changes to your models and the accompanying migration at the
same time. same time.
.. versionadded:: 1.8
If you want to give the migration(s) a meaningful name instead of a generated If you want to give the migration(s) a meaningful name instead of a generated
one, you can use the :djadminopt:`--name` option:: one, you can use the :djadminopt:`--name` option::
@ -251,8 +249,6 @@ argument, please create a keyword argument and add something like
Model managers Model managers
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
.. versionadded:: 1.8
You can optionally serialize managers into migrations and have them available You can optionally serialize managers into migrations and have them available
in :class:`~django.db.migrations.operations.RunPython` operations. This is done in :class:`~django.db.migrations.operations.RunPython` operations. This is done
by defining a ``use_in_migrations`` attribute on the manager class:: by defining a ``use_in_migrations`` attribute on the manager class::
@ -333,12 +329,6 @@ Note that this only works given two things:
that your database doesn't match your models, you'll just get errors when that your database doesn't match your models, you'll just get errors when
migrations try to modify those tables. migrations try to modify those tables.
.. versionchanged:: 1.8
The ``--fake-initial`` flag to :djadmin:`migrate` was added. Previously,
Django would always automatically fake-apply initial migrations if it
detected that the tables exist.
.. _historical-models: .. _historical-models:
Historical models Historical models
@ -380,8 +370,6 @@ can opt to move them into a superclass.
Considerations when removing model fields Considerations when removing model fields
----------------------------------------- -----------------------------------------
.. versionadded:: 1.8
Similar to the "references to historical functions" considerations described in Similar to the "references to historical functions" considerations described in
the previous section, removing custom model fields from your project or the previous section, removing custom model fields from your project or
third-party app will cause a problem if they are referenced in old migrations. third-party app will cause a problem if they are referenced in old migrations.
@ -781,48 +769,6 @@ should run unchanged on Django X.Y+1. The migrations system does not promise
forwards-compatibility, however. New features may be added, and migration files forwards-compatibility, however. New features may be added, and migration files
generated with newer versions of Django may not work on older versions. generated with newer versions of Django may not work on older versions.
.. _upgrading-from-south:
Upgrading from South
--------------------
If you already have pre-existing migrations created with
`South <http://south.aeracode.org>`_, then the upgrade process to use
``django.db.migrations`` is quite simple:
* Ensure all installs are fully up-to-date with their migrations.
* Remove ``'south'`` from :setting:`INSTALLED_APPS`.
* Delete all your (numbered) migration files, but not the directory or
``__init__.py`` - make sure you remove the ``.pyc`` files too.
* Run ``python manage.py makemigrations``. Django should see the empty
migration directories and make new initial migrations in the new format.
* Run ``python manage.py migrate --fake-initial``. Django will see that the
tables for the initial migrations already exist and mark them as applied
without running them. (Django won't check that the table schema match your
models, just that the right table names exist).
.. versionchanged:: 1.8
The :djadminopt:`--fake-initial` flag was added to :djadmin:`migrate`;
previously, initial migrations were always automatically fake-applied if
existing tables were detected.
Libraries/Third-party Apps
~~~~~~~~~~~~~~~~~~~~~~~~~~
If you are a library or app maintainer, and wish to support both South migrations
(for Django 1.6 and below) and Django migrations (for 1.7 and above) you should
keep two parallel migration sets in your app, one in each format.
To aid in this, South 1.0 will automatically look for South-format migrations
in a ``south_migrations`` directory first, before looking in ``migrations``,
meaning that users' projects will transparently use the correct set as long
as you put your South migrations in the ``south_migrations`` directory and
your Django migrations in the ``migrations`` directory.
More information is available in the
`South 1.0 release notes <http://south.readthedocs.org/en/latest/releasenotes/1.0.html#library-migration-path>`_.
.. seealso:: .. seealso::
:doc:`The Migrations Operations Reference </ref/migration-operations>` :doc:`The Migrations Operations Reference </ref/migration-operations>`

View File

@ -261,10 +261,8 @@ be notified of a signal in the face of an error.
and ensures all receivers are notified of the signal. If an error occurs, the and ensures all receivers are notified of the signal. If an error occurs, the
error instance is returned in the tuple pair for the receiver that raised the error. error instance is returned in the tuple pair for the receiver that raised the error.
.. versionadded:: 1.8 The tracebacks are present on the ``__traceback__`` attribute of the errors
returned when calling ``send_robust()``.
The tracebacks are present on the ``__traceback__`` attribute
of the errors returned when calling ``send_robust()``.
Disconnecting signals Disconnecting signals
===================== =====================
@ -278,10 +276,6 @@ arguments are as described in :meth:`.Signal.connect`. The method returns
The ``receiver`` argument indicates the registered receiver to disconnect. It The ``receiver`` argument indicates the registered receiver to disconnect. It
may be ``None`` if ``dispatch_uid`` is used to identify the receiver. may be ``None`` if ``dispatch_uid`` is used to identify the receiver.
.. versionchanged:: 1.8
The boolean return value was added.
.. deprecated:: 1.9 .. deprecated:: 1.9
The ``weak`` argument is deprecated as it has no effect. It will be removed The ``weak`` argument is deprecated as it has no effect. It will be removed

View File

@ -142,10 +142,6 @@ created within a specified period of time::
otherwise raises ``SignatureExpired``. The ``max_age`` parameter can otherwise raises ``SignatureExpired``. The ``max_age`` parameter can
accept an integer or a :py:class:`datetime.timedelta` object. accept an integer or a :py:class:`datetime.timedelta` object.
.. versionchanged:: 1.8
Previously, the ``max_age`` parameter only accepted an integer.
Protecting complex data structures Protecting complex data structures
---------------------------------- ----------------------------------

View File

@ -41,11 +41,6 @@ namespace.
Support for template engines Support for template engines
============================ ============================
.. versionadded:: 1.8
Support for multiple template engines and the :setting:`TEMPLATES` setting
were added in Django 1.8.
Configuration Configuration
------------- -------------
@ -115,30 +110,12 @@ The ``django.template.loader`` module defines two functions to load templates.
If you want to restrict the search to a particular template engine, pass If you want to restrict the search to a particular template engine, pass
the engine's :setting:`NAME <TEMPLATES-NAME>` in the ``using`` argument. the engine's :setting:`NAME <TEMPLATES-NAME>` in the ``using`` argument.
.. versionchanged:: 1.8
The ``using`` parameter was added.
.. versionchanged:: 1.8
``get_template()`` returns a backend-dependent ``Template`` instead
of a :class:`django.template.Template`.
.. function:: select_template(template_name_list, using=None) .. function:: select_template(template_name_list, using=None)
``select_template()`` is just like ``get_template()``, except it takes a ``select_template()`` is just like ``get_template()``, except it takes a
list of template names. It tries each name in order and returns the first list of template names. It tries each name in order and returns the first
template that exists. template that exists.
.. versionchanged:: 1.8
The ``using`` parameter was added.
.. versionchanged:: 1.8
``select_template()`` returns a backend-dependent ``Template`` instead
of a :class:`django.template.Template`.
.. currentmodule:: django.template .. currentmodule:: django.template
If loading a template fails, the following two exceptions, defined in If loading a template fails, the following two exceptions, defined in
@ -279,10 +256,6 @@ templates, Django provides a shortcut function which automates the process.
An optional :class:`~django.http.HttpRequest` that will be available An optional :class:`~django.http.HttpRequest` that will be available
during the template's rendering process. during the template's rendering process.
.. versionadded:: 1.8
The ``request`` argument was added.
See also the :func:`~django.shortcuts.render()` and See also the :func:`~django.shortcuts.render()` and
:func:`~django.shortcuts.render_to_response()` shortcuts, which call :func:`~django.shortcuts.render_to_response()` shortcuts, which call
:func:`render_to_string()` and feed the result into an :func:`render_to_string()` and feed the result into an

View File

@ -415,10 +415,6 @@ execute and tear down the test suite.
custom arguments by calling ``parser.add_argument()`` inside the method, so custom arguments by calling ``parser.add_argument()`` inside the method, so
that the :djadmin:`test` command will be able to use those arguments. that the :djadmin:`test` command will be able to use those arguments.
.. versionchanged:: 1.8
The ``keepdb``, ``reverse``, and ``debug_sql`` arguments were added.
Attributes Attributes
~~~~~~~~~~ ~~~~~~~~~~
@ -463,8 +459,6 @@ Methods
.. classmethod:: DiscoverRunner.add_arguments(parser) .. classmethod:: DiscoverRunner.add_arguments(parser)
.. versionadded:: 1.8
Override this class method to add custom arguments accepted by the Override this class method to add custom arguments accepted by the
:djadmin:`test` management command. See :djadmin:`test` management command. See
:py:meth:`argparse.ArgumentParser.add_argument()` for details about adding :py:meth:`argparse.ArgumentParser.add_argument()` for details about adding
@ -604,10 +598,6 @@ can be useful during testing.
:setting:`NAME` in :setting:`DATABASES` to match the name of the test :setting:`NAME` in :setting:`DATABASES` to match the name of the test
database. database.
.. versionchanged:: 1.8
The ``keepdb`` argument was added.
.. function:: destroy_test_db(old_database_name, verbosity=1, keepdb=False) .. function:: destroy_test_db(old_database_name, verbosity=1, keepdb=False)
Destroys the database whose name is the value of :setting:`NAME` in Destroys the database whose name is the value of :setting:`NAME` in
@ -620,10 +610,6 @@ can be useful during testing.
If the ``keepdb`` argument is ``True``, then the connection to the If the ``keepdb`` argument is ``True``, then the connection to the
database will be closed, but the database will not be destroyed. database will be closed, but the database will not be destroyed.
.. versionchanged:: 1.8
The ``keepdb`` argument was added.
.. _topics-testing-code-coverage: .. _topics-testing-code-coverage:
Integration with coverage.py Integration with coverage.py

View File

@ -135,13 +135,10 @@ Tests that require a database (namely, model tests) will not use your "real"
Regardless of whether the tests pass or fail, the test databases are destroyed Regardless of whether the tests pass or fail, the test databases are destroyed
when all the tests have been executed. when all the tests have been executed.
.. versionadded:: 1.8
You can prevent the test databases from being destroyed by adding the You can prevent the test databases from being destroyed by adding the
:djadminopt:`--keepdb` flag to the test command. This will preserve the test :djadminopt:`--keepdb` flag to the test command. This will preserve the test
database between runs. If the database does not exist, it will first database between runs. If the database does not exist, it will first be
be created. Any migrations will also be applied in order to keep it created. Any migrations will also be applied in order to keep it p to date.
up to date.
By default the test databases get their names by prepending ``test_`` By default the test databases get their names by prepending ``test_``
to the value of the :setting:`NAME` settings for the databases to the value of the :setting:`NAME` settings for the databases
@ -173,10 +170,6 @@ If using a SQLite in-memory database with Python 3.4+ and SQLite 3.7.13+,
`shared cache <https://www.sqlite.org/sharedcache.html>`_ will be enabled, so `shared cache <https://www.sqlite.org/sharedcache.html>`_ will be enabled, so
you can write tests with ability to share the database between threads. you can write tests with ability to share the database between threads.
.. versionadded:: 1.8
The ability to use SQLite with a shared cache as described above was added.
.. admonition:: Finding data from your production database when running tests? .. admonition:: Finding data from your production database when running tests?
If your code attempts to access the database when its modules are compiled, If your code attempts to access the database when its modules are compiled,
@ -218,11 +211,9 @@ the Django test runner reorders tests in the following way:
database by a given :class:`~django.test.TransactionTestCase` test, they database by a given :class:`~django.test.TransactionTestCase` test, they
must be updated to be able to run independently. must be updated to be able to run independently.
.. versionadded:: 1.8
You may reverse the execution order inside groups by passing You may reverse the execution order inside groups by passing
:djadminopt:`--reverse` to the test command. This can help with ensuring :djadminopt:`--reverse` to the test command. This can help with ensuring your
your tests are independent from each other. tests are independent from each other.
.. _test-case-serialized-rollback: .. _test-case-serialized-rollback:

View File

@ -237,10 +237,6 @@ Use the ``django.test.Client`` class to make requests.
You may also provide any file-like object (e.g., :class:`~io.StringIO` or You may also provide any file-like object (e.g., :class:`~io.StringIO` or
:class:`~io.BytesIO`) as a file handle. :class:`~io.BytesIO`) as a file handle.
.. versionadded:: 1.8
The ability to use a file-like object was added.
Note that if you wish to use the same file handle for multiple Note that if you wish to use the same file handle for multiple
``post()`` calls then you will need to manually reset the file ``post()`` calls then you will need to manually reset the file
pointer between posts. The easiest way to do this is to pointer between posts. The easiest way to do this is to
@ -321,8 +317,6 @@ Use the ``django.test.Client`` class to make requests.
.. method:: Client.trace(path, follow=False, secure=False, **extra) .. method:: Client.trace(path, follow=False, secure=False, **extra)
.. versionadded:: 1.8
Makes a TRACE request on the provided ``path`` and returns a Makes a TRACE request on the provided ``path`` and returns a
``Response`` object. Useful for simulating diagnostic probes. ``Response`` object. Useful for simulating diagnostic probes.
@ -496,8 +490,6 @@ Specifically, a ``Response`` object has the following attributes:
.. attribute:: resolver_match .. attribute:: resolver_match
.. versionadded:: 1.8
An instance of :class:`~django.core.urlresolvers.ResolverMatch` for the An instance of :class:`~django.core.urlresolvers.ResolverMatch` for the
response. You can use the response. You can use the
:attr:`~django.core.urlresolvers.ResolverMatch.func` attribute, for :attr:`~django.core.urlresolvers.ResolverMatch.func` attribute, for
@ -698,14 +690,6 @@ transaction, as is required when using
:meth:`~django.db.models.query.QuerySet.select_for_update()`. In those cases, :meth:`~django.db.models.query.QuerySet.select_for_update()`. In those cases,
you should use ``TransactionTestCase``. you should use ``TransactionTestCase``.
.. versionchanged:: 1.8
In older versions of Django, the effects of transaction commit and rollback
could not be tested within a ``TestCase``. With the completion of the
deprecation cycle of the old-style transaction management in Django 1.8,
transaction management commands (e.g. ``transaction.commit()``) are no
longer disabled within ``TestCase``.
``TransactionTestCase`` and ``TestCase`` are identical except for the manner ``TransactionTestCase`` and ``TestCase`` are identical except for the manner
in which the database is reset to a known state and the ability for test code in which the database is reset to a known state and the ability for test code
to test the effects of commit and rollback: to test the effects of commit and rollback:
@ -759,8 +743,6 @@ additions, including:
.. classmethod:: TestCase.setUpTestData() .. classmethod:: TestCase.setUpTestData()
.. versionadded:: 1.8
The class-level ``atomic`` block described above allows the creation of The class-level ``atomic`` block described above allows the creation of
initial data at the class level, once for the whole ``TestCase``. This initial data at the class level, once for the whole ``TestCase``. This
technique allows for faster tests as compared to using ``setUp()``. technique allows for faster tests as compared to using ``setUp()``.
@ -1433,11 +1415,9 @@ your test suite.
The name is a string such as ``'admin/index.html'``. The name is a string such as ``'admin/index.html'``.
.. versionadded:: 1.8
The count argument is an integer indicating the number of times the The count argument is an integer indicating the number of times the
template should be rendered. Default is ``None``, meaning that the template should be rendered. Default is ``None``, meaning that the template
template should be rendered one or more times. should be rendered one or more times.
You can use this as a context manager, like this:: You can use this as a context manager, like this::
@ -1562,8 +1542,6 @@ your test suite.
.. method:: SimpleTestCase.assertJSONNotEqual(raw, expected_data, msg=None) .. method:: SimpleTestCase.assertJSONNotEqual(raw, expected_data, msg=None)
.. versionadded:: 1.8
Asserts that the JSON fragments ``raw`` and ``expected_data`` are *not* equal. Asserts that the JSON fragments ``raw`` and ``expected_data`` are *not* equal.
See :meth:`~SimpleTestCase.assertJSONEqual` for further details. See :meth:`~SimpleTestCase.assertJSONEqual` for further details.
@ -1724,10 +1702,6 @@ it would under MySQL with MyISAM tables)::
# ... conditional test code # ... conditional test code
pass pass
.. versionchanged:: 1.8
``skipIfDBFeature`` can accept multiple feature strings.
.. function:: skipUnlessDBFeature(*feature_name_strings) .. function:: skipUnlessDBFeature(*feature_name_strings)
Skip the decorated test or ``TestCase`` if any of the named database features Skip the decorated test or ``TestCase`` if any of the named database features
@ -1742,7 +1716,3 @@ under MySQL with MyISAM tables)::
def test_transaction_behavior(self): def test_transaction_behavior(self):
# ... conditional test code # ... conditional test code
pass pass
.. versionchanged:: 1.8
``skipUnlessDBFeature`` can accept multiple feature strings.