1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167
|
===========================
Django Deprecation Timeline
===========================
This document outlines when various pieces of Django will be removed or altered
in a backward incompatible way, following their deprecation, as per the
:ref:`deprecation policy <internal-release-deprecation-policy>`. More details
about each item can often be found in the release notes of two versions prior.
.. _deprecation-removed-in-4.1:
4.1
---
See the :ref:`Django 3.2 release notes <deprecated-features-3.2>` for more
details on these changes.
* Support for assigning objects which don't support creating deep copies with
``copy.deepcopy()`` to class attributes in ``TestCase.setUpTestData()`` will
be removed.
* ``BaseCommand.requires_system_checks`` won't support boolean values.
* The ``whitelist`` argument and ``domain_whitelist`` attribute of
``django.core.validators.EmailValidator`` will be removed.
* The ``default_app_config`` module variable will be removed.
* ``TransactionTestCase.assertQuerysetEqual()`` will no longer automatically
call ``repr()`` on a queryset when compared to string values.
* ``django.core.cache.backends.memcached.MemcachedCache`` will be removed.
* Support for the pre-Django 3.2 format of messages used by
``django.contrib.messages.storage.cookie.CookieStorage`` will be removed.
.. _deprecation-removed-in-4.0:
4.0
---
See the :ref:`Django 3.0 release notes <deprecated-features-3.0>` for more
details on these changes.
* ``django.utils.http.urlquote()``, ``urlquote_plus()``, ``urlunquote()``, and
``urlunquote_plus()`` will be removed.
* ``django.utils.encoding.force_text()`` and ``smart_text()`` will be removed.
* ``django.utils.translation.ugettext()``, ``ugettext_lazy()``,
``ugettext_noop()``, ``ungettext()``, and ``ungettext_lazy()`` will be
removed.
* ``django.views.i18n.set_language()`` will no longer set the user language in
``request.session`` (key ``django.utils.translation.LANGUAGE_SESSION_KEY``).
* ``alias=None`` will be required in the signature of
``django.db.models.Expression.get_group_by_cols()`` subclasses.
* ``django.utils.text.unescape_entities()`` will be removed.
* ``django.utils.http.is_safe_url()`` will be removed.
See the :ref:`Django 3.1 release notes <deprecated-features-3.1>` for more
details on these changes.
* The ``PASSWORD_RESET_TIMEOUT_DAYS`` setting will be removed.
* The undocumented usage of the :lookup:`isnull` lookup with non-boolean values
as the right-hand side will no longer be allowed.
* The ``django.db.models.query_utils.InvalidQuery`` exception class will be
removed.
* The ``django-admin.py`` entry point will be removed.
* The ``HttpRequest.is_ajax()`` method will be removed.
* Support for the pre-Django 3.1 encoding format of cookies values used by
``django.contrib.messages.storage.cookie.CookieStorage`` will be removed.
* Support for the pre-Django 3.1 password reset tokens in the admin site (that
use the SHA-1 hashing algorithm) will be removed.
* Support for the pre-Django 3.1 encoding format of sessions will be removed.
* Support for the pre-Django 3.1 ``django.core.signing.Signer`` signatures
(encoded with the SHA-1 algorithm) will be removed.
* Support for the pre-Django 3.1 ``django.core.signing.dumps()`` signatures
(encoded with the SHA-1 algorithm) in ``django.core.signing.loads()`` will be
removed.
* Support for the pre-Django 3.1 user sessions (that use the SHA-1 algorithm)
will be removed.
* The ``get_response`` argument for
``django.utils.deprecation.MiddlewareMixin.__init__()`` will be required and
won't accept ``None``.
* The ``providing_args`` argument for ``django.dispatch.Signal`` will be
removed.
* The ``length`` argument for ``django.utils.crypto.get_random_string()`` will
be required.
* The ``list`` message for ``ModelMultipleChoiceField`` will be removed.
* Support for passing raw column aliases to ``QuerySet.order_by()`` will be
removed.
* The model ``NullBooleanField`` will be removed. A stub field will remain for
compatibility with historical migrations.
* ``django.conf.urls.url()`` will be removed.
* The model ``django.contrib.postgres.fields.JSONField`` will be removed. A
stub field will remain for compatibility with historical migrations.
* ``django.contrib.postgres.forms.JSONField``,
``django.contrib.postgres.fields.jsonb.KeyTransform``, and
``django.contrib.postgres.fields.jsonb.KeyTextTransform`` will be removed.
* The ``{% ifequal %}`` and ``{% ifnotequal %}`` template tags will be removed.
* The ``DEFAULT_HASHING_ALGORITHM`` transitional setting will be removed.
.. _deprecation-removed-in-3.1:
3.1
---
See the :ref:`Django 2.2 release notes <deprecated-features-2.2>` for more
details on these changes.
* ``django.utils.timezone.FixedOffset`` will be removed.
* ``django.core.paginator.QuerySetPaginator`` will be removed.
* A model's ``Meta.ordering`` will no longer affect ``GROUP BY`` queries.
* ``django.contrib.postgres.fields.FloatRangeField`` and
``django.contrib.postgres.forms.FloatRangeField`` will be removed.
* The ``FILE_CHARSET`` setting will be removed.
* ``django.contrib.staticfiles.storage.CachedStaticFilesStorage`` will be
removed.
* ``RemoteUserBackend.configure_user()`` will require ``request`` as the first
positional argument.
* Support for ``SimpleTestCase.allow_database_queries`` and
``TransactionTestCase.multi_db`` will be removed.
.. _deprecation-removed-in-3.0:
3.0
---
See the :ref:`Django 2.0 release notes<deprecated-features-2.0>` for more
details on these changes.
* The ``django.db.backends.postgresql_psycopg2`` module will be removed.
* ``django.shortcuts.render_to_response()`` will be removed.
* The ``DEFAULT_CONTENT_TYPE`` setting will be removed.
* ``HttpRequest.xreadlines()`` will be removed.
* Support for the ``context`` argument of ``Field.from_db_value()`` and
``Expression.convert_value()`` will be removed.
* The ``field_name`` keyword argument of ``QuerySet.earliest()`` and
``latest()`` will be removed.
See the :ref:`Django 2.1 release notes <deprecated-features-2.1>` for more
details on these changes.
* ``django.contrib.gis.db.models.functions.ForceRHR`` will be removed.
* ``django.utils.http.cookie_date()`` will be removed.
* The ``staticfiles`` and ``admin_static`` template tag libraries will be
removed.
* ``django.contrib.staticfiles.templatetags.static()`` will be removed.
* The shim to allow ``InlineModelAdmin.has_add_permission()`` to be defined
without an ``obj`` argument will be removed.
.. _deprecation-removed-in-2.1:
2.1
---
See the :ref:`Django 1.11 release notes<deprecated-features-1.11>` for more
details on these changes.
* ``contrib.auth.views.login()``, ``logout()``, ``password_change()``,
``password_change_done()``, ``password_reset()``, ``password_reset_done()``,
``password_reset_confirm()``, and ``password_reset_complete()`` will be
removed.
* The ``extra_context`` parameter of ``contrib.auth.views.logout_then_login()``
will be removed.
* ``django.test.runner.setup_databases()`` will be removed.
* ``django.utils.translation.string_concat()`` will be removed.
* ``django.core.cache.backends.memcached.PyLibMCCache`` will no longer support
passing ``pylibmc`` behavior settings as top-level attributes of ``OPTIONS``.
* The ``host`` parameter of ``django.utils.http.is_safe_url()`` will be
removed.
* Silencing of exceptions raised while rendering the ``{% include %}`` template
tag will be removed.
* ``DatabaseIntrospection.get_indexes()`` will be removed.
* The ``authenticate()`` method of authentication backends will require
``request`` as the first positional argument.
* The ``django.db.models.permalink()`` decorator will be removed.
* The ``USE_ETAGS`` setting will be removed. ``CommonMiddleware`` and
``django.utils.cache.patch_response_headers()`` will no longer set ETags.
* The ``Model._meta.has_auto_field`` attribute will be removed.
* ``url()``'s support for inline flags in regular expression groups (``(?i)``,
``(?L)``, ``(?m)``, ``(?s)``, and ``(?u)``) will be removed.
* Support for ``Widget.render()`` methods without the ``renderer`` argument
will be removed.
.. _deprecation-removed-in-2.0:
2.0
---
See the :ref:`Django 1.9 release notes<deprecated-features-1.9>` for more
details on these changes.
* The ``weak`` argument to ``django.dispatch.signals.Signal.disconnect()`` will
be removed.
* ``django.db.backends.base.BaseDatabaseOperations.check_aggregate_support()``
will be removed.
* The ``django.forms.extras`` package will be removed.
* The ``assignment_tag`` helper will be removed.
* The ``host`` argument to ``assertsRedirects`` will be removed. The
compatibility layer which allows absolute URLs to be considered equal to
relative ones when the path is identical will also be removed.
* ``Field.rel`` will be removed.
* ``Field.remote_field.to`` attribute will be removed.
* The ``on_delete`` argument for ``ForeignKey`` and ``OneToOneField`` will be
required.
* ``django.db.models.fields.add_lazy_relation()`` will be removed.
* When time zone support is enabled, database backends that don't support time
zones won't convert aware datetimes to naive values in UTC anymore when such
values are passed as parameters to SQL queries executed outside of the ORM,
e.g. with ``cursor.execute()``.
* The ``django.contrib.auth.tests.utils.skipIfCustomUser()`` decorator will be
removed.
* The ``GeoManager`` and ``GeoQuerySet`` classes will be removed.
* The ``django.contrib.gis.geoip`` module will be removed.
* The ``supports_recursion`` check for template loaders will be removed from:
* ``django.template.engine.Engine.find_template()``
* ``django.template.loader_tags.ExtendsNode.find_template()``
* ``django.template.loaders.base.Loader.supports_recursion()``
* ``django.template.loaders.cached.Loader.supports_recursion()``
* The ``load_template()`` and ``load_template_sources()`` template loader
methods will be removed.
* The ``template_dirs`` argument for template loaders will be removed:
* ``django.template.loaders.base.Loader.get_template()``
* ``django.template.loaders.cached.Loader.cache_key()``
* ``django.template.loaders.cached.Loader.get_template()``
* ``django.template.loaders.cached.Loader.get_template_sources()``
* ``django.template.loaders.filesystem.Loader.get_template_sources()``
* The ``django.template.loaders.base.Loader.__call__()`` method will be
removed.
* Support for custom error views with a single positional parameter will be
dropped.
* The ``mime_type`` attribute of ``django.utils.feedgenerator.Atom1Feed`` and
``django.utils.feedgenerator.RssFeed`` will be removed in favor of
``content_type``.
* The ``app_name`` argument to ``django.conf.urls.include()`` will be
removed.
* Support for passing a 3-tuple as the first argument to ``include()`` will
be removed.
* Support for setting a URL instance namespace without an application
namespace will be removed.
* ``Field._get_val_from_obj()`` will be removed in favor of
``Field.value_from_object()``.
* ``django.template.loaders.eggs.Loader`` will be removed.
* The ``current_app`` parameter to the ``contrib.auth`` views will be removed.
* The ``callable_obj`` keyword argument to
``SimpleTestCase.assertRaisesMessage()`` will be removed.
* Support for the ``allow_tags`` attribute on ``ModelAdmin`` methods will be
removed.
* The ``enclosure`` keyword argument to ``SyndicationFeed.add_item()`` will be
removed.
* The ``django.template.loader.LoaderOrigin`` and
``django.template.base.StringOrigin`` aliases for
``django.template.base.Origin`` will be removed.
See the :ref:`Django 1.10 release notes <deprecated-features-1.10>` for more
details on these changes.
* The ``makemigrations --exit`` option will be removed.
* Support for direct assignment to a reverse foreign key or many-to-many
relation will be removed.
* The ``get_srid()`` and ``set_srid()`` methods of
``django.contrib.gis.geos.GEOSGeometry`` will be removed.
* The ``get_x()``, ``set_x()``, ``get_y()``, ``set_y()``, ``get_z()``, and
``set_z()`` methods of ``django.contrib.gis.geos.Point`` will be removed.
* The ``get_coords()`` and ``set_coords()`` methods of
``django.contrib.gis.geos.Point`` will be removed.
* The ``cascaded_union`` property of ``django.contrib.gis.geos.MultiPolygon``
will be removed.
* ``django.utils.functional.allow_lazy()`` will be removed.
* The ``shell --plain`` option will be removed.
* The ``django.core.urlresolvers`` module will be removed.
* The model ``CommaSeparatedIntegerField`` will be removed. A stub field will
remain for compatibility with historical migrations.
* Support for the template ``Context.has_key()`` method will be removed.
* Support for the ``django.core.files.storage.Storage.accessed_time()``,
``created_time()``, and ``modified_time()`` methods will be removed.
* Support for query lookups using the model name when
``Meta.default_related_name`` is set will be removed.
* The ``__search`` query lookup and the
``DatabaseOperations.fulltext_search_sql()`` method will be removed.
* The shim for supporting custom related manager classes without a
``_apply_rel_filters()`` method will be removed.
* Using ``User.is_authenticated()`` and ``User.is_anonymous()`` as methods
will no longer be supported.
* The private attribute ``virtual_fields`` of ``Model._meta`` will be removed.
* The private keyword arguments ``virtual_only`` in
``Field.contribute_to_class()`` and ``virtual`` in
``Model._meta.add_field()`` will be removed.
* The ``javascript_catalog()`` and ``json_catalog()`` views will be removed.
* The ``django.contrib.gis.utils.precision_wkt()`` function will be removed.
* In multi-table inheritance, implicit promotion of a ``OneToOneField`` to a
``parent_link`` will be removed.
* Support for ``Widget._format_value()`` will be removed.
* ``FileField`` methods ``get_directory_name()`` and ``get_filename()`` will be
removed.
* The ``mark_for_escaping()`` function and the classes it uses: ``EscapeData``,
``EscapeBytes``, ``EscapeText``, ``EscapeString``, and ``EscapeUnicode`` will
be removed.
* The ``escape`` filter will change to use
``django.utils.html.conditional_escape()``.
* ``Manager.use_for_related_fields`` will be removed.
* Model ``Manager`` inheritance will follow MRO inheritance rules and the
``Meta.manager_inheritance_from_future`` to opt-in to this behavior will be
removed.
* Support for old-style middleware using ``settings.MIDDLEWARE_CLASSES`` will
be removed.
.. _deprecation-removed-in-1.10:
1.10
----
See the :ref:`Django 1.8 release notes<deprecated-features-1.8>` for more
details on these changes.
* Support for calling a ``SQLCompiler`` directly as an alias for calling its
``quote_name_unless_alias`` method will be removed.
* ``cycle`` and ``firstof`` template tags will be removed from the ``future``
template tag library (used during the 1.6/1.7 deprecation period).
* ``django.conf.urls.patterns()`` will be removed.
* Support for the ``prefix`` argument to
``django.conf.urls.i18n.i18n_patterns()`` will be removed.
* ``SimpleTestCase.urls`` will be removed.
* Using an incorrect count of unpacked values in the ``for`` template tag
will raise an exception rather than fail silently.
* The ability to reverse URLs using a dotted Python path will be removed.
* The ability to use a dotted Python path for the ``LOGIN_URL`` and
``LOGIN_REDIRECT_URL`` settings will be removed.
* Support for :py:mod:`optparse` will be dropped for custom management commands
(replaced by :py:mod:`argparse`).
* The class ``django.core.management.NoArgsCommand`` will be removed. Use
:class:`~django.core.management.BaseCommand` instead, which takes no arguments
by default.
* ``django.core.context_processors`` module will be removed.
* ``django.db.models.sql.aggregates`` module will be removed.
* ``django.contrib.gis.db.models.sql.aggregates`` module will be removed.
* The following methods and properties of ``django.db.sql.query.Query`` will
be removed:
* Properties: ``aggregates`` and ``aggregate_select``
* Methods: ``add_aggregate``, ``set_aggregate_mask``, and
``append_aggregate_mask``.
* ``django.template.resolve_variable`` will be removed.
* The following private APIs will be removed from
:class:`django.db.models.options.Options` (``Model._meta``):
* ``get_field_by_name()``
* ``get_all_field_names()``
* ``get_fields_with_model()``
* ``get_concrete_fields_with_model()``
* ``get_m2m_with_model()``
* ``get_all_related_objects()``
* ``get_all_related_objects_with_model()``
* ``get_all_related_many_to_many_objects()``
* ``get_all_related_m2m_objects_with_model()``
* The ``error_message`` argument of ``django.forms.RegexField`` will be removed.
* The ``unordered_list`` filter will no longer support old style lists.
* Support for string ``view`` arguments to ``url()`` will be removed.
* The backward compatible shim to rename ``django.forms.Form._has_changed()``
to ``has_changed()`` will be removed.
* The ``removetags`` template filter will be removed.
* The ``remove_tags()`` and ``strip_entities()`` functions in
``django.utils.html`` will be removed.
* The ``is_admin_site`` argument to
``django.contrib.auth.views.password_reset()`` will be removed.
* ``django.db.models.field.subclassing.SubfieldBase`` will be removed.
* ``django.utils.checksums`` will be removed; its functionality is included
in ``django-localflavor`` 1.1+.
* The ``original_content_type_id`` attribute on
``django.contrib.admin.helpers.InlineAdminForm`` will be removed.
* The backwards compatibility shim to allow ``FormMixin.get_form()`` to be
defined with no default value for its ``form_class`` argument will be removed.
* The following settings will be removed:
* ``ALLOWED_INCLUDE_ROOTS``
* ``TEMPLATE_CONTEXT_PROCESSORS``
* ``TEMPLATE_DEBUG``
* ``TEMPLATE_DIRS``
* ``TEMPLATE_LOADERS``
* ``TEMPLATE_STRING_IF_INVALID``
* The backwards compatibility alias ``django.template.loader.BaseLoader`` will
be removed.
* Django template objects returned by
:func:`~django.template.loader.get_template` and
:func:`~django.template.loader.select_template` won't accept a
:class:`~django.template.Context` in their
:meth:`~django.template.backends.base.Template.render()` method anymore.
* :doc:`Template response APIs </ref/template-response>` will enforce the use
of :class:`dict` and backend-dependent template objects instead of
:class:`~django.template.Context` and :class:`~django.template.Template`
respectively.
* The ``current_app`` parameter for the following function and classes will be
removed:
* ``django.shortcuts.render()``
* ``django.template.Context()``
* ``django.template.RequestContext()``
* ``django.template.response.TemplateResponse()``
* The ``dictionary`` and ``context_instance`` parameters for the following
functions will be removed:
* ``django.shortcuts.render()``
* ``django.shortcuts.render_to_response()``
* ``django.template.loader.render_to_string()``
* The ``dirs`` parameter for the following functions will be removed:
* ``django.template.loader.get_template()``
* ``django.template.loader.select_template()``
* ``django.shortcuts.render()``
* ``django.shortcuts.render_to_response()``
* Session verification will be enabled regardless of whether or not
``'django.contrib.auth.middleware.SessionAuthenticationMiddleware'`` is in
``MIDDLEWARE_CLASSES``.
* Private attribute ``django.db.models.Field.related`` will be removed.
* The ``--list`` option of the ``migrate`` management command will be removed.
* The ``ssi`` template tag will be removed.
* Support for the ``=`` comparison operator in the ``if`` template tag will be
removed.
* The backwards compatibility shims to allow ``Storage.get_available_name()``
and ``Storage.save()`` to be defined without a ``max_length`` argument will
be removed.
* Support for the legacy ``%(<foo>)s`` syntax in ``ModelFormMixin.success_url``
will be removed.
* ``GeoQuerySet`` aggregate methods ``collect()``, ``extent()``, ``extent3d()``,
``make_line()``, and ``unionagg()`` will be removed.
* Ability to specify ``ContentType.name`` when creating a content type instance
will be removed.
* Support for the old signature of ``allow_migrate`` will be removed. It changed
from ``allow_migrate(self, db, model)`` to
``allow_migrate(self, db, app_label, model_name=None, **hints)``.
* Support for the syntax of ``{% cycle %}`` that uses comma-separated arguments
will be removed.
* The warning that :class:`~django.core.signing.Signer` issues when given an
invalid separator will become an exception.
.. _deprecation-removed-in-1.9:
1.9
---
See the :ref:`Django 1.7 release notes<deprecated-features-1.7>` for more
details on these changes.
* ``django.utils.dictconfig`` will be removed.
* ``django.utils.importlib`` will be removed.
* ``django.utils.tzinfo`` will be removed.
* ``django.utils.unittest`` will be removed.
* The ``syncdb`` command will be removed.
* ``django.db.models.signals.pre_syncdb`` and
``django.db.models.signals.post_syncdb`` will be removed.
* ``allow_syncdb`` on database routers will no longer automatically become
``allow_migrate``.
* Automatic syncing of apps without migrations will be removed. Migrations will
become compulsory for all apps unless you pass the ``--run-syncdb`` option to
``migrate``.
* The SQL management commands for apps without migrations, ``sql``, ``sqlall``,
``sqlclear``, ``sqldropindexes``, and ``sqlindexes``, will be removed.
* Support for automatic loading of ``initial_data`` fixtures and initial SQL
data will be removed.
* All models will need to be defined inside an installed application or
declare an explicit :attr:`~django.db.models.Options.app_label`.
Furthermore, it won't be possible to import them before their application
is loaded. In particular, it won't be possible to import models inside
the root package of their application.
* The model and form ``IPAddressField`` will be removed. A stub field will
remain for compatibility with historical migrations.
* ``AppCommand.handle_app()`` will no longer be supported.
* ``RequestSite`` and ``get_current_site()`` will no longer be importable from
``django.contrib.sites.models``.
* FastCGI support via the ``runfcgi`` management command will be
removed. Please deploy your project using WSGI.
* ``django.utils.datastructures.SortedDict`` will be removed. Use
:class:`collections.OrderedDict` from the Python standard library instead.
* ``ModelAdmin.declared_fieldsets`` will be removed.
* Instances of ``util.py`` in the Django codebase have been renamed to
``utils.py`` in an effort to unify all util and utils references.
The modules that provided backwards compatibility will be removed:
* ``django.contrib.admin.util``
* ``django.contrib.gis.db.backends.util``
* ``django.db.backends.util``
* ``django.forms.util``
* ``ModelAdmin.get_formsets`` will be removed.
* The backward compatibility shim introduced to rename the
``BaseMemcachedCache._get_memcache_timeout()`` method to
``get_backend_timeout()`` will be removed.
* The ``--natural`` and ``-n`` options for :djadmin:`dumpdata` will be removed.
* The ``use_natural_keys`` argument for ``serializers.serialize()`` will be
removed.
* Private API ``django.forms.forms.get_declared_fields()`` will be removed.
* The ability to use a ``SplitDateTimeWidget`` with ``DateTimeField`` will be
removed.
* The ``WSGIRequest.REQUEST`` property will be removed.
* The class ``django.utils.datastructures.MergeDict`` will be removed.
* The ``zh-cn`` and ``zh-tw`` language codes will be removed and have been
replaced by the ``zh-hans`` and ``zh-hant`` language code respectively.
* The internal ``django.utils.functional.memoize`` will be removed.
* ``django.core.cache.get_cache`` will be removed. Add suitable entries
to :setting:`CACHES` and use :data:`django.core.cache.caches` instead.
* ``django.db.models.loading`` will be removed.
* Passing callable arguments to querysets will no longer be possible.
* ``BaseCommand.requires_model_validation`` will be removed in favor of
``requires_system_checks``. Admin validators will be replaced by admin
checks.
* The ``ModelAdmin.validator_class`` and ``default_validator_class`` attributes
will be removed.
* ``ModelAdmin.validate()`` will be removed.
* ``django.db.backends.DatabaseValidation.validate_field`` will be removed in
favor of the ``check_field`` method.
* The ``validate`` management command will be removed.
* ``django.utils.module_loading.import_by_path`` will be removed in favor of
``django.utils.module_loading.import_string``.
* ``ssi`` and ``url`` template tags will be removed from the ``future`` template
tag library (used during the 1.3/1.4 deprecation period).
* ``django.utils.text.javascript_quote`` will be removed.
* Database test settings as independent entries in the database settings,
prefixed by ``TEST_``, will no longer be supported.
* The ``cache_choices`` option to :class:`~django.forms.ModelChoiceField` and
:class:`~django.forms.ModelMultipleChoiceField` will be removed.
* The default value of the
:attr:`RedirectView.permanent <django.views.generic.base.RedirectView.permanent>`
attribute will change from ``True`` to ``False``.
* ``django.contrib.sitemaps.FlatPageSitemap`` will be removed in favor of
``django.contrib.flatpages.sitemaps.FlatPageSitemap``.
* Private API ``django.test.utils.TestTemplateLoader`` will be removed.
* The ``django.contrib.contenttypes.generic`` module will be removed.
* Private APIs ``django.db.models.sql.where.WhereNode.make_atom()`` and
``django.db.models.sql.where.Constraint`` will be removed.
.. _deprecation-removed-in-1.8:
1.8
---
See the :ref:`Django 1.6 release notes<deprecated-features-1.6>` for more
details on these changes.
* ``django.contrib.comments`` will be removed.
* The following transaction management APIs will be removed:
- ``TransactionMiddleware``,
- the decorators and context managers ``autocommit``, ``commit_on_success``,
and ``commit_manually``, defined in ``django.db.transaction``,
- the functions ``commit_unless_managed`` and ``rollback_unless_managed``,
also defined in ``django.db.transaction``,
- the ``TRANSACTIONS_MANAGED`` setting.
* The :ttag:`cycle` and :ttag:`firstof` template tags will auto-escape their
arguments. In 1.6 and 1.7, this behavior is provided by the version of these
tags in the ``future`` template tag library.
* The ``SEND_BROKEN_LINK_EMAILS`` setting will be removed. Add the
:class:`django.middleware.common.BrokenLinkEmailsMiddleware` middleware to
your ``MIDDLEWARE_CLASSES`` setting instead.
* ``django.middleware.doc.XViewMiddleware`` will be removed. Use
``django.contrib.admindocs.middleware.XViewMiddleware`` instead.
* ``Model._meta.module_name`` was renamed to ``model_name``.
* Remove the backward compatible shims introduced to rename ``get_query_set``
and similar queryset methods. This affects the following classes:
``BaseModelAdmin``, ``ChangeList``, ``BaseCommentNode``,
``GenericForeignKey``, ``Manager``, ``SingleRelatedObjectDescriptor`` and
``ReverseSingleRelatedObjectDescriptor``.
* Remove the backward compatible shims introduced to rename the attributes
``ChangeList.root_query_set`` and ``ChangeList.query_set``.
* ``django.views.defaults.shortcut`` will be removed, as part of the
goal of removing all ``django.contrib`` references from the core
Django codebase. Instead use
``django.contrib.contenttypes.views.shortcut``. ``django.conf.urls.shortcut``
will also be removed.
* Support for the Python Imaging Library (PIL) module will be removed, as it
no longer appears to be actively maintained & does not work on Python 3.
* The following private APIs will be removed:
- ``django.db.backend``
- ``django.db.close_connection()``
- ``django.db.backends.creation.BaseDatabaseCreation.set_autocommit()``
- ``django.db.transaction.is_managed()``
- ``django.db.transaction.managed()``
* ``django.forms.widgets.RadioInput`` will be removed in favor of
``django.forms.widgets.RadioChoiceInput``.
* The module ``django.test.simple`` and the class
``django.test.simple.DjangoTestSuiteRunner`` will be removed. Instead use
``django.test.runner.DiscoverRunner``.
* The module ``django.test._doctest`` will be removed. Instead use the doctest
module from the Python standard library.
* The ``CACHE_MIDDLEWARE_ANONYMOUS_ONLY`` setting will be removed.
* Usage of the hard-coded *Hold down "Control", or "Command" on a Mac, to select
more than one.* string to override or append to user-provided ``help_text`` in
forms for ManyToMany model fields will not be performed by Django anymore
either at the model or forms layer.
* The ``Model._meta.get_(add|change|delete)_permission`` methods will
be removed.
* The session key ``django_language`` will no longer be read for backwards
compatibility.
* Geographic Sitemaps will be removed
(``django.contrib.gis.sitemaps.views.index`` and
``django.contrib.gis.sitemaps.views.sitemap``).
* ``django.utils.html.fix_ampersands``, the ``fix_ampersands`` template filter and
``django.utils.html.clean_html`` will be removed following an accelerated deprecation.
.. _deprecation-removed-in-1.7:
1.7
---
See the :ref:`Django 1.5 release notes<deprecated-features-1.5>` for more
details on these changes.
* The module ``django.utils.simplejson`` will be removed. The standard library
provides :mod:`json` which should be used instead.
* The function ``django.utils.itercompat.product`` will be removed. The Python
builtin version should be used instead.
* Auto-correction of INSTALLED_APPS and TEMPLATE_DIRS settings when they are
specified as a plain string instead of a tuple will be removed and raise an
exception.
* The ``mimetype`` argument to the ``__init__`` methods of
:class:`~django.http.HttpResponse`,
:class:`~django.template.response.SimpleTemplateResponse`, and
:class:`~django.template.response.TemplateResponse`, will be removed.
``content_type`` should be used instead. This also applies to the
``render_to_response()`` shortcut and the sitemap views,
:func:`~django.contrib.sitemaps.views.index` and
:func:`~django.contrib.sitemaps.views.sitemap`.
* When :class:`~django.http.HttpResponse` is instantiated with an iterator,
or when :attr:`~django.http.HttpResponse.content` is set to an iterator,
that iterator will be immediately consumed.
* The ``AUTH_PROFILE_MODULE`` setting, and the ``get_profile()`` method on
the User model, will be removed.
* The ``cleanup`` management command will be removed. It's replaced by
``clearsessions``.
* The ``daily_cleanup.py`` script will be removed.
* The ``depth`` keyword argument will be removed from
:meth:`~django.db.models.query.QuerySet.select_related`.
* The undocumented ``get_warnings_state()``/``restore_warnings_state()``
functions from :mod:`django.test.utils` and the ``save_warnings_state()``/
``restore_warnings_state()``
:ref:`django.test.*TestCase <django-testcase-subclasses>` methods are
deprecated. Use the :class:`warnings.catch_warnings` context manager
available starting with Python 2.6 instead.
* The undocumented ``check_for_test_cookie`` method in
:class:`~django.contrib.auth.forms.AuthenticationForm` will be removed
following an accelerated deprecation. Users subclassing this form should
remove calls to this method, and instead ensure that their auth related views
are CSRF protected, which ensures that cookies are enabled.
* The version of ``django.contrib.auth.views.password_reset_confirm()`` that
supports base36 encoded user IDs
(``django.contrib.auth.views.password_reset_confirm_uidb36``) will be
removed. If your site has been running Django 1.6 for more than
:setting:`PASSWORD_RESET_TIMEOUT_DAYS`, this change will have no effect. If
not, then any password reset links generated before you upgrade to Django 1.7
won't work after the upgrade.
* The ``django.utils.encoding.StrAndUnicode`` mix-in will be removed.
.. _deprecation-removed-in-1.6:
1.6
---
See the :ref:`Django 1.4 release notes<deprecated-features-1.4>` for more
details on these changes.
* ``django.contrib.databrowse`` will be removed.
* ``django.contrib.localflavor`` will be removed following an accelerated
deprecation.
* ``django.contrib.markup`` will be removed following an accelerated
deprecation.
* The compatibility modules ``django.utils.copycompat`` and
``django.utils.hashcompat`` as well as the functions
``django.utils.itercompat.all`` and ``django.utils.itercompat.any`` will
be removed. The Python builtin versions should be used instead.
* The ``csrf_response_exempt`` and ``csrf_view_exempt`` decorators will
be removed. Since 1.4 ``csrf_response_exempt`` has been a no-op (it
returns the same function), and ``csrf_view_exempt`` has been a
synonym for ``django.views.decorators.csrf.csrf_exempt``, which should
be used to replace it.
* The ``django.core.cache.backends.memcached.CacheClass`` backend
was split into two in Django 1.3 in order to introduce support for
PyLibMC. The historical ``CacheClass`` will be removed in favor of
``django.core.cache.backends.memcached.MemcachedCache``.
* The UK-prefixed objects of ``django.contrib.localflavor.uk`` will only
be accessible through their GB-prefixed names (GB is the correct
ISO 3166 code for United Kingdom).
* The ``IGNORABLE_404_STARTS`` and ``IGNORABLE_404_ENDS`` settings have been
superseded by :setting:`IGNORABLE_404_URLS` in the 1.4 release. They will be
removed.
* The form wizard has been refactored to use class-based views with pluggable
backends in 1.4. The previous implementation will be removed.
* Legacy ways of calling
:func:`~django.views.decorators.cache.cache_page` will be removed.
* The backward-compatibility shim to automatically add a debug-false
filter to the ``'mail_admins'`` logging handler will be removed. The
:setting:`LOGGING` setting should include this filter explicitly if
it is desired.
* The builtin truncation functions ``django.utils.text.truncate_words()``
and ``django.utils.text.truncate_html_words()`` will be removed in
favor of the ``django.utils.text.Truncator`` class.
* The ``django.contrib.gis.geoip.GeoIP`` class was moved to
``django.contrib.gis.geoip`` in 1.4 -- the shortcut in
``django.contrib.gis.utils`` will be removed.
* ``django.conf.urls.defaults`` will be removed. The functions
``include()``, ``patterns()``, and ``url()``, plus
:data:`~django.conf.urls.handler404` and :data:`~django.conf.urls.handler500`
are now available through ``django.conf.urls``.
* The functions ``setup_environ()`` and ``execute_manager()`` will be removed
from :mod:`django.core.management`. This also means that the old (pre-1.4)
style of :file:`manage.py` file will no longer work.
* Setting the ``is_safe`` and ``needs_autoescape`` flags as attributes of
template filter functions will no longer be supported.
* The attribute ``HttpRequest.raw_post_data`` was renamed to ``HttpRequest.body``
in 1.4. The backward compatibility will be removed --
``HttpRequest.raw_post_data`` will no longer work.
* The value for the ``post_url_continue`` parameter in
``ModelAdmin.response_add()`` will have to be either ``None`` (to redirect
to the newly created object's edit page) or a pre-formatted url. String
formats, such as the previous default ``'../%s/'``, will not be accepted any
more.
.. _deprecation-removed-in-1.5:
1.5
---
See the :ref:`Django 1.3 release notes<deprecated-features-1.3>` for more
details on these changes.
* Starting Django without a :setting:`SECRET_KEY` will result in an exception
rather than a ``DeprecationWarning``. (This is accelerated from the usual
deprecation path; see the :doc:`Django 1.4 release notes</releases/1.4>`.)
* The ``mod_python`` request handler will be removed. The ``mod_wsgi``
handler should be used instead.
* The ``template`` attribute on ``django.test.client.Response``
objects returned by the :ref:`test client <test-client>` will be removed.
The :attr:`~django.test.Response.templates` attribute should be
used instead.
* The ``django.test.simple.DjangoTestRunner`` will be removed.
Instead use a ``unittest``-native class. The features of the
``django.test.simple.DjangoTestRunner`` (including fail-fast and
Ctrl-C test termination) can be provided by :class:`unittest.TextTestRunner`.
* The undocumented function
``django.contrib.formtools.utils.security_hash`` will be removed,
instead use ``django.contrib.formtools.utils.form_hmac``
* The function-based generic view modules will be removed in favor of their
class-based equivalents, outlined :doc:`here
</topics/class-based-views/index>`.
* The ``django.core.servers.basehttp.AdminMediaHandler`` will be
removed. In its place use
``django.contrib.staticfiles.handlers.StaticFilesHandler``.
* The template tags library ``adminmedia`` and the template tag ``{%
admin_media_prefix %}`` will be removed in favor of the generic static files
handling. (This is faster than the usual deprecation path; see the
:doc:`Django 1.4 release notes</releases/1.4>`.)
* The ``url`` and ``ssi`` template tags will be modified so that the first
argument to each tag is a template variable, not an implied string. In 1.4,
this behavior is provided by a version of the tag in the ``future`` template
tag library.
* The ``reset`` and ``sqlreset`` management commands will be removed.
* Authentication backends will need to support an inactive user
being passed to all methods dealing with permissions.
The ``supports_inactive_user`` attribute will no longer be checked
and can be removed from custom backends.
* :meth:`~django.contrib.gis.geos.GEOSGeometry.transform` will raise
a :class:`~django.contrib.gis.geos.GEOSException` when called
on a geometry with no SRID value.
* ``django.http.CompatCookie`` will be removed in favor of
``django.http.SimpleCookie``.
* ``django.core.context_processors.PermWrapper`` and
``django.core.context_processors.PermLookupDict`` will be removed in
favor of the corresponding
``django.contrib.auth.context_processors.PermWrapper`` and
``django.contrib.auth.context_processors.PermLookupDict``, respectively.
* The :setting:`MEDIA_URL` or :setting:`STATIC_URL` settings will be
required to end with a trailing slash to ensure there is a consistent
way to combine paths in templates.
* ``django.db.models.fields.URLField.verify_exists`` will be removed. The
feature was deprecated in 1.3.1 due to intractable security and
performance issues and will follow a slightly accelerated deprecation
timeframe.
* Translations located under the so-called *project path* will be ignored during
the translation building process performed at runtime. The
:setting:`LOCALE_PATHS` setting can be used for the same task by including the
filesystem path to a ``locale`` directory containing non-app-specific
translations in its value.
* The Markup contrib app will no longer support versions of Python-Markdown
library earlier than 2.1. An accelerated timeline was used as this was
a security related deprecation.
* The ``CACHE_BACKEND`` setting will be removed. The cache backend(s) should be
specified in the :setting:`CACHES` setting.
.. _deprecation-removed-in-1.4:
1.4
---
See the :ref:`Django 1.2 release notes<deprecated-features-1.2>` for more
details on these changes.
* ``CsrfResponseMiddleware`` and ``CsrfMiddleware`` will be removed. Use
the ``{% csrf_token %}`` template tag inside forms to enable CSRF
protection. ``CsrfViewMiddleware`` remains and is enabled by default.
* The old imports for CSRF functionality (``django.contrib.csrf.*``),
which moved to core in 1.2, will be removed.
* The ``django.contrib.gis.db.backend`` module will be removed in favor
of the specific backends.
* ``SMTPConnection`` will be removed in favor of a generic Email backend API.
* The many to many SQL generation functions on the database backends
will be removed.
* The ability to use the ``DATABASE_*`` family of top-level settings to
define database connections will be removed.
* The ability to use shorthand notation to specify a database backend
(i.e., ``sqlite3`` instead of ``django.db.backends.sqlite3``) will be
removed.
* The ``get_db_prep_save``, ``get_db_prep_value`` and
``get_db_prep_lookup`` methods will have to support multiple databases.
* The ``Message`` model (in ``django.contrib.auth``), its related
manager in the ``User`` model (``user.message_set``), and the
associated methods (``user.message_set.create()`` and
``user.get_and_delete_messages()``), will be removed. The
:doc:`messages framework </ref/contrib/messages>` should be used
instead. The related ``messages`` variable returned by the
auth context processor will also be removed. Note that this
means that the admin application will depend on the messages
context processor.
* Authentication backends will need to support the ``obj`` parameter for
permission checking. The ``supports_object_permissions`` attribute
will no longer be checked and can be removed from custom backends.
* Authentication backends will need to support the ``AnonymousUser`` class
being passed to all methods dealing with permissions. The
``supports_anonymous_user`` variable will no longer be checked and can be
removed from custom backends.
* The ability to specify a callable template loader rather than a
``Loader`` class will be removed, as will the ``load_template_source``
functions that are included with the built in template loaders for
backwards compatibility.
* ``django.utils.translation.get_date_formats()`` and
``django.utils.translation.get_partial_date_formats()``. These functions
will be removed; use the locale-aware
``django.utils.formats.get_format()`` to get the appropriate formats.
* In ``django.forms.fields``, the constants: ``DEFAULT_DATE_INPUT_FORMATS``,
``DEFAULT_TIME_INPUT_FORMATS`` and
``DEFAULT_DATETIME_INPUT_FORMATS`` will be removed. Use
``django.utils.formats.get_format()`` to get the appropriate
formats.
* The ability to use a function-based test runner will be removed,
along with the ``django.test.simple.run_tests()`` test runner.
* The ``views.feed()`` view and ``feeds.Feed`` class in
``django.contrib.syndication`` will be removed. The class-based view
``views.Feed`` should be used instead.
* ``django.core.context_processors.auth``. This release will
remove the old method in favor of the new method in
``django.contrib.auth.context_processors.auth``.
* The ``postgresql`` database backend will be removed, use the
``postgresql_psycopg2`` backend instead.
* The ``no`` language code will be removed and has been replaced by the
``nb`` language code.
* Authentication backends will need to define the boolean attribute
``supports_inactive_user`` until version 1.5 when it will be assumed that
all backends will handle inactive users.
* ``django.db.models.fields.XMLField`` will be removed. This was
deprecated as part of the 1.3 release. An accelerated deprecation
schedule has been used because the field hasn't performed any role
beyond that of a simple ``TextField`` since the removal of ``oldforms``.
All uses of ``XMLField`` can be replaced with ``TextField``.
* The undocumented ``mixin`` parameter to the ``open()`` method of
``django.core.files.storage.Storage`` (and subclasses) will be removed.
.. _deprecation-removed-in-1.3:
1.3
---
See the :ref:`Django 1.1 release notes<deprecated-features-1.1>` for more
details on these changes.
* ``AdminSite.root()``. This method of hooking up the admin URLs will be
removed in favor of including ``admin.site.urls``.
* Authentication backends need to define the boolean attributes
``supports_object_permissions`` and ``supports_anonymous_user`` until
version 1.4, at which point it will be assumed that all backends will
support these options.
|