Calendrier d’obsolescence de Django¶
Ce document présente les échéances où divers aspects de Django seront supprimés ou modifiés de manière non rétrocompatible, après une période d’obsolescence, en accord avec la politique d’obsolescence. Plus de détails sur ces différents éléments sont souvent disponibles dans les notes de publication les précédant de deux versions.
6.0¶
Consultez les notes de publication de Django 5.0 pour plus de détails sur ces changements.
Les producteurs de formulaires de transition
DjangoDivFormRendereretJinja2DivFormRendererseront supprimés.La prise en charge des arguments positionnels à
BaseConstraintsera supprimée.requestsera obligatoire dans la signature des sous-classes deModelAdmin.lookup_allowed().django.db.models.sql.datastructures.Joinne fera plus appel àget_joining_columns().La méthode
get_joining_columns()deForeignObjectet deForeignObjectRelsera supprimée.La méthode
ForeignObject.get_reverse_joining_columns()sera supprimée.Le protocole par défaut de
forms.URLFieldpassera de"http"à"https".La prise en charge de l’appel à
format_html()sans transmettre d’arguments, nommés ou pas, sera supprimée.La prise en charge de
cx_Oraclesera supprimée.BaseDatabaseOperations.field_cast_sql()sera supprimée.L’alias
ChoicesMetadedjango.db.models.enums.ChoicesTypesera supprimé.La méthode
Prefetch.get_current_queryset()sera supprimée.La méthode
get_prefetch_queryset()des gestionnaires de liaison et des descripteurs sera supprimée.get_prefetcher()etprefetch_related_objects()ne se rabattront plus versget_prefetch_queryset().Le réglage temporaire
FORMS_URLFIELD_ASSUME_HTTPSsera supprimé.
Consultez les notes de publication de Django 5.1 pour plus de détails sur ces changements.
Les méthodes
ModelAdmin.log_deletion()etLogEntryManager.log_action()seront supprimées.La fonction non documentée
django.utils.itercompat.is_iterable()et le moduledjango.utils.itercompatseront supprimés.La méthode
django.contrib.gis.geoip2.GeoIP2.coords()sera supprimée.La méthode
django.contrib.gis.geoip2.GeoIP2.open()sera supprimée.La prise en charge des arguments positionnels à
Model.save()etModel.asave()sera supprimée.La possibilité de définir la valeur
django.contrib.gis.gdal.OGRGeometry.coord_dimsera supprimée.django.urls.register_converter()ne permettra plus de surcharger des convertisseurs existants.Le paramètre nommé
checkdeCheckConstraintsera supprimé.L’attribut
OS_OPEN_FLAGSdeFileSystemStoragesera supprimé.La méthode
get_cache_name()deFieldCacheMixinsera supprimée.
5.1¶
Consultez les notes de publication de Django 4.2 pour plus de détails sur ces changements.
La méthode
BaseUserManager.make_random_password()sera supprimée.L’option de modèle
Meta.index_togethersera supprimée.Le filtre de gabarit
length_issera supprimé.Les classes django.contrib.auth.hashers.SHA1PasswordHasher`,
django.contrib.auth.hashers.UnsaltedSHA1PasswordHasheretdjango.contrib.auth.hashers.UnsaltedMD5PasswordHasherseront supprimées.Les modèles
django.contrib.postgres.fields.CICharField,django.contrib.postgres.fields.CIEmailFieldetdjango.contrib.postgres.fields.CITextFieldseront supprimés. Des champs factices resteront pour assurer la compatibilité avec les migrations historiques.La classe mixin
django.contrib.postgres.fields.CITextsera supprimée.Les attributs
map_widthetmap_heightdeBaseGeometryWidgetseront supprimés.La méthode
SimpleTestCase.assertFormsetError()sera supprimée.La méthode
TransactionTestCase.assertQuerysetEqual()sera supprimée.La prise en charge des chaînes littérales encodées en JSON à
JSONFieldet aux requêtes et expressions associées sera supprimée.La prise en charge des arguments positionnels à
SigneretTimestampSignersera supprimée.Les réglages
DEFAULT_FILE_STORAGEetSTATICFILES_STORAGEseront supprimés.La fonction
django.core.files.storage.get_storage_class()sera supprimée.
5.0¶
Consultez les notes de publication de Django 4.0 pour plus de détails sur ces changements.
Le réglage de test
SERIALIZEsera supprimé.Le module non documenté
django.utils.baseconvsera supprimé.Le module non documenté
django.utils.datetime_safesera supprimé.La valeur par défaut du réglage
USE_TZva changer deFalseàTrue.Le protocole par défaut pour les plans de site construits en dehors du contexte de la requête changera de
'http'à'https'.L’argument
extra_testsdeDiscoverRunner.build_suite()et deDiscoverRunner.run_tests()sera supprimé.Les agrégats
django.contrib.postgres.aggregates.ArrayAgg,JSONBAggetStringAggrenvoientNonelorsqu’il n’y a aucun résultat, au lieu de[],[]et'', respectivement.Le réglage
USE_L10Nsera supprimé.Le réglage temporaire
USE_DEPRECATED_PYTZsera supprimé.La prise en charge des fuseaux horaires
pytzsera supprimée.Le paramètre
is_dstsera supprimé de :QuerySet.datetimes()django.utils.timezone.make_aware()django.db.models.functions.Trunc()django.db.models.functions.TruncSecond()django.db.models.functions.TruncMinute()django.db.models.functions.TruncHour()django.db.models.functions.TruncDay()django.db.models.functions.TruncWeek()django.db.models.functions.TruncMonth()django.db.models.functions.TruncQuarter()django.db.models.functions.TruncYear()
Les classes
django.contrib.gis.admin.GeoModelAdminetOSMGeoAdminseront supprimées.La méthode non documentée
BaseForm._html_output()sera supprimée.La capacité de renvoyer une chaîne
strau lieu d’une instanceSafeString, lors de la production d’unErrorDictou d’ErrorListsera supprimée.
Consultez les notes de publication de Django 4.1 pour plus de détails sur ces changements.
La méthode
SitemapIndexItem.__str__()sera supprimée.Le réglage temporaire
CSRF_COOKIE_MASKEDsera supprimé.L’argument
namededjango.utils.functional.cached_property()sera supprimé.L’argument
opclassesdedjango.contrib.postgres.constraints.ExclusionConstraintsera supprimé.La capacité non documentée de transmettre
errors=NoneàSimpleTestCase.assertFormError()etassertFormsetError()sera supprimée.django.contrib.sessions.serializers.PickleSerializersera supprimé.L’utilisation de
QuerySet.iterator()sur un jeu de requête qui précharge les objets liés sans fournir l’argumentchunk_sizene sera plus autorisée.La transmission d’instances de modèles non enregistrées à des filtres de modèles liés ne sera plus autorisée.
created=Truesera obligatoire dans la signature des sous-classes deRemoteUserBackend.configure_user().La prise en charge de la déconnexion par des requêtes
GETdans les vuesdjango.contrib.auth.views.LogoutViewetdjango.contrib.auth.views.logout_then_login()sera supprimée.L’alias
django.utils.timezone.utcversdatetime.timezone.utcsera supprimé.La transmission d’un objet réponse et d’un nom de formulaire à
SimpleTestCase.assertFormError()etassertFormsetError()ne sera plus autorisée.Le composant
django.contrib.gis.admin.OpenLayersWidgetsera supprimé.django.contrib.auth.hashers.CryptPasswordHashersera supprimé.Les gabarits
"django/forms/default.html"et"django/forms/formsets/default.html"seront supprimés.La possibilité de passer
nulls_first=Falseounulls_last=Falseaux méthodesExpression.asc()etExpression.desc()et à l’expressionOrderBysera supprimée.
4.1¶
Consultez les notes de publication de Django 3.2 pour plus de détails sur ces changements.
La prise en charge de l’attribution d’objets ne pouvant pas être copiés profondément par
copy.deepcopy()à des attributs de classe dansTestCase.setUpTestData()sera supprimée.BaseCommand.requires_system_checksne prendra plus en charge les valeurs booléennes.L’argument
whitelistet l’attributdomain_whitelistdedjango.core.validators.EmailValidatorseront supprimés.La variable de module
default_app_configsera supprimée.TransactionTestCase.assertQuerysetEqual()n’appellera plus automatiquementrepr()sur un jeu de requête lors de comparaisons avec des valeurs textuelles.django.core.cache.backends.memcached.MemcachedCachesera supprimée.La prise en charge du format des messages d’avant Django 3.2 utilisé par
django.contrib.messages.storage.cookie.CookieStoragesera supprimée.
4.0¶
Consultez les notes de publication de Django 3.0 pour plus de détails sur ces changements.
django.utils.http.urlquote(),urlquote_plus(),urlunquote()eturlunquote_plus()seront supprimées.django.utils.encoding.force_text()etsmart_text()seront supprimées.django.utils.translation.ugettext(),ugettext_lazy(),ugettext_noop(),ungettext()etungettext_lazy()seront supprimées.django.views.i18n.set_language()ne définira plus la langue de l’utilisateur dansrequest.session(clédjango.utils.translation.LANGUAGE_SESSION_KEY).alias=Nonesera obligatoire dans la signature des sous-classes dedjango.db.models.Expression.get_group_by_cols().django.utils.text.unescape_entities()sera supprimée.django.utils.http.is_safe_url()sera supprimée.
Consultez les notes de publication de Django 3.1 pour plus de détails sur ces changements.
Le réglage
PASSWORD_RESET_TIMEOUT_DAYSsera supprimé.L’utilisation non documentée de l’expression de requête
isnullavec des valeurs non booléennes dans la partie droite ne sera plus autorisée.La classe d’exception
django.db.models.query_utils.InvalidQuerysera supprimée.Le point d’entrée
django-admin.pysera supprimé.La méthode
HttpRequest.is_ajax()sera supprimée.La prise en charge du format de codage des cookies d’avant Django 3.1 utilisé par
django.contrib.messages.storage.cookie.CookieStoragesera supprimée.La prise en charge des jetons de réinitialisation des mots de passe d’avant Django 3.1 dans le site d’administration (qui utilise l’algorithme de hachage SHA-1) sera supprimée.
La prise en charge du format de codage des sessions d’avant Django 3.1 sera supprimée.
La prise en charge des signatures
django.core.signing.Signerd’avant Django 3.1 (utilisant l’algorithme de hachage SHA-1) sera supprimée.La prise en charge des signatures
django.core.signing.dumps()d’avant Django 3.1 (utilisant l’algorithme de hachage SHA-1) sera supprimée dansdjango.core.signing.loads().La prise en charge des sessions d’utilisateurs d’avant Django 3.1 (utilisant l’algorithme de hachage SHA-1) sera supprimée.
L’argument
get_responsededjango.utils.deprecation.MiddlewareMixin.__init__()sera obligatoire et n’acceptera plusNone.L’argument
providing_argsdedjango.dispatch.Signalsera supprimé.Le paramètre
lengthdedjango.utils.crypto.get_random_string()sera obligatoire.Le message
listdeModelMultipleChoiceFieldsera supprimé.La prise en charge de la transmission d’alias de colonnes bruts à
QuerySet.order_by()sera supprimée.Le modèle
NullBooleanFieldsera supprimé. Un champ factice restera pour des raisons de compatibilité avec les migrations historiques.django.conf.urls.url()sera supprimée.Le modèle
django.contrib.postgres.fields.JSONFieldsera supprimé. Un champ factice restera pour des raisons de compatibilité avec l’historique des migrations.django.contrib.postgres.forms.JSONField,django.contrib.postgres.fields.jsonb.KeyTransformetdjango.contrib.postgres.fields.jsonb.KeyTextTransformseront supprimés.Les balises de gabarit
{% ifequal %}et{% ifnotequal %}seront supprimées.Le réglage temporaire
DEFAULT_HASHING_ALGORITHMsera supprimé.
3.1¶
Consultez les notes de publication de Django 2.2 pour plus de détails sur ces changements.
django.utils.timezone.FixedOffsetsera supprimée.django.core.paginator.QuerySetPaginatorsera supprimée.L’attribut
Meta.orderingdes modèles n’affectera plus les requêtesGROUP BY.django.contrib.postgres.fields.FloatRangeFieldetdjango.contrib.postgres.forms.FloatRangeFieldseront supprimés.Le réglage
FILE_CHARSETsera supprimé.django.contrib.staticfiles.storage.CachedStaticFilesStoragesera supprimée.RemoteUserBackend.configure_user()exigerarequestcomme premier paramètre positionnel.La prise en charge de
SimpleTestCase.allow_database_querieset deTransactionTestCase.multi_dbsera supprimée.
3.0¶
Consultez les notes de publication de Django 2.0 pour plus de détails sur ces changements.
Le module
django.db.backends.postgresql_psycopg2sera supprimé.django.shortcuts.render_to_response()sera supprimée.Le réglage
DEFAULT_CONTENT_TYPEsera supprimé.HttpRequest.xreadlines()sera supprimée.La prise en charge du paramètre
contextdeField.from_db_value()et deExpression.convert_value()sera supprimée.Le paramètre nommé
field_namedeQuerySet.earliest()et delatest()sera supprimé.
Consultez les notes de publication de Django 2.1 pour plus de détails sur ces changements.
django.contrib.gis.db.models.functions.ForceRHRsera supprimée.django.utils.http.cookie_date()sera supprimée.Les bibliothèques de balises de gabarits
staticfilesetadmin_staticseront supprimées.django.contrib.staticfiles.templatetags.static()sera supprimée.La couche de compatibilité pour permettre à
InlineModelAdmin.has_add_permission()d’être définie sans paramètreobjsera supprimée.
2.1¶
Consultez les notes de publication de Django 1.11 pour plus de détails sur ces changements.
contrib.auth.views.login(),logout(),password_change(),password_change_done(),password_reset(),password_reset_done(),password_reset_confirm()etpassword_reset_complete()seront supprimées.Le paramètre
extra_contextdecontrib.auth.views.logout_then_login()sera supprimé.django.test.runner.setup_databases()sera supprimée.django.utils.translation.string_concat()sera supprimée.django.core.cache.backends.memcached.PyLibMCCachene prendra plus en charge la transmission des réglages de comportementpylibmccomme attributs de premier niveau desOPTIONS.Le paramètre
hostdedjango.utils.http.is_safe_url()sera supprimé.Le masquage des exceptions produites lors du rendu de la balise de gabarit
{% include %}sera supprimé.DatabaseIntrospection.get_indexes()sera supprimée.La méthode
authenticate()des moteurs d’authentification exigerarequestcomme premier paramètre positionnel.Le décorateur
django.db.models.permalink()sera supprimé.Le réglage
USE_ETAGSsera supprimé.CommonMiddlewareetdjango.utils.cache.patch_response_headers()ne créeront plus d’ETags.L’attribut
Model._meta.has_auto_fieldsera supprimé.La prise en charge de
url()des drapeaux en ligne dans les groupes d’expressions régulières ((?i),(?L),(?m),(?s), and(?u)) sera supprimée.La prise en charge des méthodes
Widget.render()sans le paramètrerenderersera supprimée.
2.0¶
Consultez les notes de publication de Django 1.9 pour plus de détails sur ces changements.
Le paramètre
weakdedjango.dispatch.signals.Signal.disconnect()sera supprimé.django.db.backends.base.BaseDatabaseOperations.check_aggregate_support()sera supprimée.Le paquet
django.forms.extrassera supprimé.L’utilitaire
assignment_tagsera supprimé.Le paramètre
hostdeassertsRedirectssera supprimé. La couche de compatibilité qui permet de considérer les URL absolues égales aux URL relatives lorsque le chemin est identique sera également supprimée.Field.relsera supprimé.L’attribut
Field.remote_field.tosera supprimé.Le paramètre
on_deletedeForeignKeyetOneToOneFielddeviendra obligatoire.django.db.models.fields.add_lazy_relation()sera supprimée.Lorsque la prise en charge des fuseaux horaires est active, les moteurs de base de données qui ne prennent pas en charge les fuseaux horaires ne vont plus convertir les dates/heures avec fuseau en valeurs UTC naïves lorsque de telles valeurs sont transmises en paramètre à des requêtes SQL exécutées en dehors de l’ORM, par exemple avec
cursor.execute().Le décorateur
django.contrib.auth.tests.utils.skipIfCustomUser()sera supprimé.Les classes
GeoManageretGeoQuerySetseront supprimées.Le module
django.contrib.gis.geoipsera supprimé.Le contrôle
supports_recursionpour les chargeurs de gabarit sera supprimé de :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()
Les méthodes de chargeur de gabarit
load_template()etload_template_sources()seront supprimées.Le paramètre
template_dirsdes chargeurs de gabarit sera supprimé de :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()
La méthode
django.template.loaders.base.Loader.__call__()sera supprimée.La prise en charge des vues d’erreur personnalisées avec un seul paramètre positionnel sera supprimée.
L’attribut
mime_typededjango.utils.feedgenerator.Atom1Feedet dedjango.utils.feedgenerator.RssFeedsera supprimé en faveur decontent_type.Le paramètre
app_namededjango.conf.urls.include()sera supprimé.La prise en charge de la transmission d’un tuple à 3 comme premier paramètre de
include()sera supprimée.La prise en charge de la définition de l’espace de nom d’une instance d’URL sans espace de nom d’application sera supprimée.
Field._get_val_from_obj()sera supprimée en faveur deField.value_from_object().django.template.loaders.eggs.Loadersera supprimée.Le paramètre
current_appdecontrib.authsera supprimé.Le paramètre nommé
callable_objdeSimpleTestCase.assertRaisesMessage()sera supprimé.La prise en charge de l’attribut
allow_tagsdes méthodesModelAdminsera supprimée.Le paramètre nommé
enclosuredeSyndicationFeed.add_item()sera supprimé.Les alias
django.template.loader.LoaderOriginetdjango.template.base.StringOrigindedjango.template.base.Originseront supprimés.
Consultez les notes de publication de Django 1.10 pour plus de détails sur ces changements.
L’option
makemigrations --exitsera supprimée.La prise en charge de l’attribution directe à une clé étrangère inversée ou à des relations plusieurs-à-plusieurs sera supprimée.
Les méthodes
get_srid()etset_srid()dedjango.contrib.gis.geos.GEOSGeometryseront supprimées.Les méthodes
get_x(),set_x(),get_y(),set_y(),get_z()etset_z()dedjango.contrib.gis.geos.Pointseront supprimées.Les méthodes
get_coords()etset_coords()dedjango.contrib.gis.geos.Pointseront supprimées.La propriété
cascaded_uniondedjango.contrib.gis.geos.MultiPolygonsera supprimée.django.utils.functional.allow_lazy()sera supprimée.L’option
shell --plainsera supprimée.Le module
django.core.urlresolverssera supprimé.Le modèle
CommaSeparatedIntegerFieldsera supprimé. Un champ factice restera pour des raisons de compatibilité avec les migrations historiques.La prise en charge de la méthode de gabarit
Context.has_key()sera supprimée.La prise en charge des méthodes
django.core.files.storage.Storage.accessed_time(),created_time()etmodified_time()sera supprimée.Les expressions de requête utilisant le nom de modèle lorsque
Meta.default_related_nameest défini ne seront plus prises en charge.L’expression de requête
__searchet la méthodeDatabaseOperations.fulltext_search_sql()seront supprimées.Le bout de code prenant en charge les classes personnalisées de gestionnaire de champs liés sans méthode
_apply_rel_filters()sera supprimé.L’utilisation de
User.is_authenticated()et deUser.is_anonymous()sous forme de méthode ne sera plus prise en charge.L’attribut privé
virtual_fieldsdeModel._metasera supprimé.Les arguments nommés privés
virtual_onlydansField.contribute_to_class()etvirtualdansModel._meta.add_field()seront supprimés.Les vues
javascript_catalog()etjson_catalog()seront supprimées.La fonction
django.contrib.gis.utils.precision_wkt()sera supprimée.Dans l’héritage multitable, la promotion implicite d’un champ
OneToOneFieldvers un lienparent_linksera supprimée.La prise en charge de
Widget._format_value()sera supprimée.Les méthodes
get_directory_name()etget_filename()deFileFieldseront supprimées.La fonction
mark_for_escaping()et les classes qu’elle utilise :EscapeData,EscapeBytes,EscapeText,EscapeStringetEscapeUnicodeseront supprimées.Le filtre
escapesera modifié pour utiliserdjango.utils.html.conditional_escape().Manager.use_for_related_fieldssera supprimé.L’héritage de
Managerdes modèles va suivre les règles d’héritage MRO et l’attributMeta.manager_inheritance_from_futurequi active ce comportement sera supprimé.La prise en charge de l’ancien style d’intergiciel utilisant
settings.MIDDLEWARE_CLASSESsera supprimée.
1.10¶
Consultez les notes de publication de Django 1.8 pour plus de détails sur ces changements.
La prise en charge de l’appel direct à
SQLCompilercomme alias pour appeler sa méthodequote_name_unless_aliassera supprimée.Les balises de gabarit
cycleetfirstofseront supprimées de la bibliothèque de balises de gabaritfuture(utilisées durant la période d’obsolescence 1.6/1.7).django.conf.urls.patterns()sera supprimée.La prise en charge de l’argument
prefixdedjango.conf.urls.i18n.i18n_patterns()sera supprimée.SimpleTestCase.urlssera supprimé.L’utilisation d’un nombre incorrect de valeurs dépaquetées dans la balise de gabarit
forproduira une exception et n’échouera plus de manière silencieuse.La possibilité de résoudre des URL avec un chemin Python pointé sera supprimée.
La possibilité d’utiliser un chemin Python pointé pour les réglages
LOGIN_URLetLOGIN_REDIRECT_URLsera supprimée.La prise en charge de
optparsepour les commandes d’administration personnalisées sera supprimée (remplacée parargparse).La classe
django.core.management.NoArgsCommandsera supprimée. UtilisezBaseCommandà la place, qui n’accepte aucun argument par défaut.Le module
django.core.context_processorssera supprimé.Le module
djangodb.models.sql.aggregatessera supprimé.Le module
django.contrib.gis.db.models.sql.aggregatessera supprimé.Les méthodes et propriétés suivantes de
django.db.sql.query.Queryseront supprimées :Propriétés :
aggregatesetaggregate_selectMéthodes :
add_aggregate,set_aggregate_masketappend_aggregate_mask.
django.template.resolve_variablesera supprimée.Les API privées suivantes seront supprimées de
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()
Le paramètre
error_messagededjango.forms.RegexFieldsera supprimé.Le filtre
unordered_listne prendra plus en charge les listes de l’ancien style.La prise en charge des paramètres de
viewsous forme de texte dansurl()sera supprimée.La couche de rétrocompatibilité pour renommer
django.forms.Form._has_changed()enhas_changed()sera supprimée.Le filtre de gabarit
removetagssera supprimé.Les fonctions
remove_tags()etstrip_entities()dedjango.utils.htmlseront supprimées.Le paramètre
is_admin_sitededjango.contrib.auth.views.password_reset()sera supprimé.django.db.models.field.subclassing.SubfieldBasesera supprimée.django.utils.checksumssera supprimée ; cette fonctionnalité est incluse dansdjango-localflavor1.1+.L’attribut
original_content_type_iddedjango.contrib.admin.helpers.InlineAdminFormsera supprimé.La couche de compatibilité pour permettre à
FormMixin.get_form()d’être définie sans valeur par défaut pour son paramètreform_classsera supprimée.Les réglages suivants seront supprimés :
ALLOWED_INCLUDE_ROOTSTEMPLATE_CONTEXT_PROCESSORSTEMPLATE_DEBUGTEMPLATE_DIRSTEMPLATE_LOADERSTEMPLATE_STRING_IF_INVALID
L’alias de rétrocompatibilité
django.template.loader.BaseLoadersera supprimé.Les objets de gabarit Django renvoyés par
get_template()etselect_template()n’accepteront plus deContextdans leur méthoderender().Les API de réponse de gabarit forceront l’usage de
dictet d’objets de gabarit dépendants du moteur au lieu de respectivementContextet deTemplate.Le paramètre
current_appsera supprimé des fonction et classes suivantes :django.shortcuts.render()django.template.Context()django.template.RequestContext()django.template.response.TemplateResponse()
Les paramètres
dictionaryetcontext_instanceseront supprimés des fonctions suivantes :django.shortcuts.render()django.shortcuts.render_to_response()django.template.loader.render_to_string()
Le paramètre
dirssera supprimé des fonctions suivantes :django.template.loader.get_template()django.template.loader.select_template()django.shortcuts.render()django.shortcuts.render_to_response()
La vérification des sessions sera active sans tenir compte de la présence de
'django.contrib.auth.middleware.SessionAuthenticationMiddleware'dansMIDDLEWARE_CLASSES.L’attribut privé
django.db.models.Field.relatedsera supprimé.L’option
--listde la commande d’administrationmigratesera supprimée.La balise de gabarit
ssisera supprimée.La prise en charge de l’opérateur de comparaison
=sera supprimée dans la balise de gabaritif.Les bouts de code de rétrocompatibilité pour permettre de définir
Storage.get_available_name()etStorage.save()sans argumentmax_lengthseront supprimés.La prise en charge de l’ancienne syntaxe
%(<foo>)sdansModelFormMixin.success_urlsera supprimée.Les méthodes d’agrégation
GeoQuerySetcollect(),extent(),extent3d(),make_line()etunionagg()seront supprimées.La possibilité de définir
ContentType.namelors de la création d’une instance de type de contenu sera supprimée.La prise en charge de l’ancienne signature de
allow_migratesera supprimée. Elle a changé deallow_migrate(self, db, model)àallow_migrate(self, db, app_label, model_name=None, **hints).La prise en charge de la syntaxe de
{% cycle %}utilisant les arguments séparés par des virgules sera supprimée.L’avertissement que donne
Signerlorsqu’elle reçoit un séparateur non valable deviendra une exception.
1.9¶
Consultez les notes de publication de Django 1.7 pour plus de détails sur ces changements.
django.utils.dictconfigsera supprimé.django.utils.importlibsera supprimé.django.utils.tzinfosera supprimé.django.utils.unittestsera supprimé.La commande
syncdbsera supprimée.django.db.models.signals.pre_syncdbetdjango.db.models.signals.post_syncdbseront supprimés.allow_syncdbsur les routeurs de base de données ne deviendra plus automatiquementallow_migrate.La synchronisation automatique des applications sans migrations sera supprimée. Les migrations deviendront obligatoires pour toutes les applications sauf quand l’option
--run-syncdbest transmise à la commandemigrate.Les commandes d’administration SQL pour les applications sans migrations
sql,sqlall,sqlclear,sqldropindexesetsqlindexesseront supprimées.La prise en charge du chargement automatique des instantanés
initial_dataet des données SQL initiales sera supprimée.Tous les modèles devront être définis dans une application installée ou déclarer une option
app_labelexplicite. De plus, il ne sera plus possible de les importer avant que leur application soit chargée. En particulier, il ne sera plus possible d’importer des modèles dans le paquet racine de leur application.Les champ de modèle et de formulaire
IPAddressFieldseront supprimés. Un champ de substitution restera pour des raisons de compatibilité avec l’historique des migrations.AppCommand.handle_app()ne sera plus prise en charge.RequestSiteetget_current_site()ne pourront plus être importés à partir dedjango.contrib.sites.models.La prise en charge de FastCGI par la commande d’administration
runfcgisera supprimée. Veuillez déployer votre projet avec WSGI.django.utils.datastructures.SortedDictsera supprimé. Utilisez à la placecollections.OrderedDictde la bibliothèque Python standard.ModelAdmin.declared_fieldsetssera supprimé.Les instances de fichier
util.pydans la base de code de Django ont été renommées enutils.pydans un effort d’unification de toutes les références àutiletutils. Les modules qui garantissent une rétrocompatibilité seront supprimés.django.contrib.admin.utildjango.contrib.gis.db.backends.utildjango.db.backends.utildjango.forms.util
ModelAdmin.get_formsetssera supprimé.Le code de rétrocompatibilité permettant le renommage de la méthode
BaseMemcachedCache._get_memcache_timeout()enget_backend_timeout()sera supprimé.Les options
--naturalet-ndedumpdataseront supprimées.Le paramètre
use_natural_keysdeserializers.serialize()sera supprimé.L’API privée
django.forms.forms.get_declared_fields()sera supprimée.La possibilité d’utiliser un composant
SplitDateTimeWidgetavecDateTimeFieldsera supprimée.La propriété
WSGIRequest.REQUESTsera supprimée.La classe
django.utils.datastructures.MergeDictsera supprimée.Les codes de langues
zh-cnetzh-twseront supprimés et remplacés respectivement par les codes de langueszh-hansetzh-hant.La fonction interne
django.utils.functional.memoizesera supprimée.django.core.cache.get_cachesera supprimée. Ajoutez plutôt les lignes adéquates dansCACHESet utilisezdjango.core.cache.caches.django.db.models.loadingsera supprimée.La transmission de paramètres exécutables aux jeux de requête ne sera plus possible.
BaseCommand.requires_model_validationsera supprimé en faveur derequires_system_checks.Les attributs
ModelAdmin.validator_classetdefault_validator_classseront supprimés.ModelAdmin.validate()sera supprimée.django.db.backends.DatabaseValidation.validate_fieldsera supprimée en faveur de la méthodecheck_field.La commande d’administration
validatesera supprimée.django.utils.module_loading.import_by_pathsera supprimé en faveur dedjango.utils.module_loading.import_string.Les balises de gabarit
ssieturlseront supprimées de la bibliothèque de balises de gabaritfuture(utilisées durant la période d’obsolescence 1.3/1.4).django.utils.text.javascript_quotesera supprimé.Les réglages de test de base de données comme entrées indépendantes dans les réglages de base de données, préfixés par
TEST_ne seront plus pris en charge.L’option
cache_choicesdeModelChoiceFieldetModelMultipleChoiceFieldsera supprimée.La valeur par défaut de l’attribut
RedirectView.permanentsera modifié deTrueàFalse.django.contrib.sitemaps.FlatPageSitemapsera supprimée en faveur dedjango.contrib.flatpages.sitemaps.FlatPageSitemap.L’API privée
django.test.utils.TestTemplateLoadersera supprimée.Le module
django.contrib.contenttypes.genericsera supprimé.Les API privées
django.db.models.sql.where.WhereNode.make_atom()etdjango.db.models.sql.where.Constraintseront supprimées.
1.8¶
Consultez les notes de publication de Django 1.6 pour plus de détails sur ces changements.
django.contrib.commentssera supprimé.Les API de gestion des transactions suivantes seront supprimées :
TransactionMiddleware,les décorateurs et gestionnaires de contexte
autocommit,commit_on_successetcommit_manually, définis dansdjango.db.transaction,les fonctions
commit_unless_managedetrollback_unless_managed, aussi définies dansdjango.db.transaction,le réglage
TRANSACTIONS_MANAGED.
Les balises de gabarit
cycleetfirstofvont automatiquement échapper leurs paramètres. Dans 1.6 et 1.7, ce comportement est offert par les versions de ces balises dans la bibliothèque de balises de gabaritfuture.Le réglage
SEND_BROKEN_LINK_EMAILSsera supprimé. Ajoutez plutôt l’intergicieldjango.middleware.common.BrokenLinkEmailsMiddlewareà votre réglageMIDDLEWARE_CLASSES.django.middleware.doc.XViewMiddlewaresera supprimé. Utilisezdjango.contrib.admindocs.middleware.XViewMiddlewareà la place.Model._meta.module_namea été renommé enmodel_name.Suppression du code de rétrocompatibilité introduit pour renommer
get_query_setet les méthodes similaires de jeux de requêtes. Cela affecte les classes suivantes :BaseModelAdmin,ChangeList,BaseCommentNode,GenericForeignKey,Manager,SingleRelatedObjectDescriptoretReverseSingleRelatedObjectDescriptor.Suppression du code de rétrocompatibilité introduit pour renommer les attributs
ChangeList.root_query_setetChangeList.query_set.django.views.defaults.shortcutsera supprimée, dans le cadre de l’objectif de supprimer toutes les références àdjango.contribdans le code du cœur de Django. Utilisezdjango.contrib.contenttypes.views.shortcutà la place.django.conf.urls.shortcutsera aussi supprimée.Le module Python Imaging Library (PIL) ne sera plus pris en charge, car il ne semble plus activement maintenu et qu’il ne fonctionne pas avec Python 3.
Les API privées suivantes seront supprimées :
django.db.backenddjango.db.close_connection()django.db.backends.creation.BaseDatabaseCreation.set_autocommit()django.db.transaction.is_managed()django.db.transaction.managed()
django.forms.widgets.RadioInputsera supprimé en faveur dedjango.forms.widgets.RadioChoiceInput.Le module
django.test.simpleet la classedjango.test.simple.DjangoTestSuiteRunnerseront supprimés. Utilisezdjango.test.runner.DiscoverRunnerà la place.Le module
django.test._doctestsera supprimé. Utilisez à la place le module doctest de la bibliothèque Python standard.Le réglage
CACHE_MIDDLEWARE_ANONYMOUS_ONLYsera supprimé.L’utilisation de la chaîne codée en dur Maintenir «Contrôle» ou «Commande» sur Mac pour sélectionner plusieurs pour remplacer ou ajouter au contenu
help_textdes formulaires pour les champs de modèle ManyToMany ne sera plus appliquée par Django, ni pour les modèles, ni pour les formulaires.Les méthodes
Model._meta.get_(add|change|delete)_permissionseront supprimées.La clé de session
django_languagene sera plus lue comme elle l’était par rétrocompatibilité.Les plans de site géographiques seront supprimés (
django.contrib.gis.sitemaps.views.indexetdjango.contrib.gis.sitemaps.views.sitemap).django.utils.html.fix_ampersands, le filtre de gabaritfix_ampersandsetdjango.utils.html.clean_htmlseront supprimés selon une obsolescence accélérée.
1.7¶
Consultez les notes de publication de Django 1.5 pour plus de détails sur ces changements.
Le module
django.utils.simplejsonsera supprimé. La bibliothèque standard fournitjsonqui doit être utilisé à la place.La fonction
django.utils.itercompat.productsera supprimée. La version intégrée à Python doit être utilisée à la place.La correction automatique des réglages INSTALLED_APPS et TEMPLATE_DIRS lorsqu’ils contiennent des chaînes au lieu de tuples sera supprimée et produira une exception.
L’argument
mimetypedes méthodes__init__de class:~django.http.HttpResponse,SimpleTemplateResponseetTemplateResponsesera supprimé. Il faut utilisercontent_typeà la place. Cela s’applique aussi au raccourcirender_to_response()et aux vues des plans de sites,index()etsitemap().Lorsque
HttpResponseest instanciée avec un itérateur ou lorsquecontentest défini à un itérateur, ce dernier sera immédiatement consommé.Le réglage
AUTH_PROFILE_MODULEainsi que la méthodeget_profile()du modèleUserseront supprimés.La commande d’administration
cleanupsera supprimée. Elle est remplacée parclearsessions.Le script
daily_cleanup.pysera supprimé.Le paramètre nommé
depthsera supprimé deselect_related().Les fonctions non documentées
get_warnings_state()/restore_warnings_state()dedjango.test.utilset les méthodes django.test.*TestCasesave_warnings_state()/restore_warnings_state()sont obsolètes. Utilisez plutôt le gestionnaire de contextewarnings.catch_warningsdisponible à partir de Python 2.6.La méthode non documentée
check_for_test_cookiedansAuthenticationFormsera supprimée à la suite d’une obsolescence accélérée. Les personnes héritant de ce formulaire doivent supprimer les appels à cette méthode et s’assurer à la place que leurs vues liées à l’authentification soient protégées par CSRF, ce qui garantit que les cookies sont activés.La version de
django.contrib.auth.views.password_reset_confirm()qui prend en charge les identifiants d’utilisateur codés en base36 (django.contrib.auth.views.password_reset_confirm_uidb36`) sera supprimée. Si votre site a fonctionné sous Django 1.6 pendant plus dePASSWORD_RESET_TIMEOUT_DAYSjours, ce changement n’aura aucun effet. Sinon, tout lien de réinitialisation de mot de passe généré avant de mettre à jour à Django 1.7 ne fonctionnera plus après la mise à jour.La classe mixin
django.utils.encoding.StrAndUnicodesera supprimée.
1.6¶
Consultez les notes de publication de Django 1.4 pour plus de détails sur ces changements.
django.contrib.databrowsesera supprimée.django.contrib.localflavorsera supprimée suite à une obsolescence accélérée.django.contrib.markupsera supprimée suite à une obsolescence accélérée.Les modules de compatibilité
django.utils.copycompatetdjango.utils.hashcompatde même que les fonctionsdjango.utils.itercompat.alletdjango.utils.itercompat.anyseront supprimées. Les versions intégrées à Python doivent être utilisées à la place.Les décorateurs
csrf_response_exemptetcsrf_view_exemptseront supprimés. Depuis la version 1.4,csrf_response_exemptétait sans effet (elle renvoie la même fonction) etcsrf_view_exemptétait un synonyme dedjango.views.decorators.csrf.csrf_exempt, qui doit être utilisée pour la remplacer.Le moteur
django.core.cache.backends.memcached.CacheClassa été séparé en deux dans Django 1.3 afin d’ajouter la prise en charge de PyLibMC. La classe historiqueCacheClasssera supprimée en faveur dedjango.core.cache.backends.memcached.MemcachedCache.Les objets avec préfixe UK de
django.contrib.localflavor.ukne seront plus disponibles que sous leur nom préfixé avec GB (GB est le code ISO 3166 correct pour le Royaume-Uni).Les réglages
IGNORABLE_404_STARTSetIGNORABLE_404_ENDSont été remplacés parIGNORABLE_404_URLSdans la version 1.4. Ils seront supprimés.L’assistant de formulaire a été retravaillé pour utiliser les vues basées sur les classes avec des moteurs interchangeables dans 1.4. L’implémentation précédente sera supprimée.
Les anciennes manières d’appeler
cache_page()seront supprimées.Le code de rétrocompatibilité pour automatiquement ajouter un filtre debug à faux dans le gestionnaire de journalisation
'mail_admins'sera supprimé. Le réglageLOGGINGdevrait inclure ce filtre explicitement s’il est souhaité.Les fonctions de troncature intégrées
django.utils.text.truncate_words()etdjango.utils.text.truncate_html_words()seront supprimées en faveur de la nouvelle classedjango.utils.text.Truncator.La classe
django.contrib.gis.geoip.GeoIPa été déplacée dansdjango.contrib.gis.geoipdans la version 1.4 – le raccourci dansdjango.contrib.gis.utilssera supprimé.django.conf.urls.defaultssera supprimée. Les fonctionsinclude(),patterns()eturl(), ainsi quehandler404ethandler500sont dorénavant disponibles pardjango.conf.urls.Les fonctions
setup_environ()etexecute_manager()seront supprimées dedjango.core.management. Cela signifie aussi que l’ancien (pré-1.4) style de fichiermanage.pyne fonctionnera plus.La définition des drapeaux
is_safeetneeds_autoescapeen tant qu’attributs des fonctions de filtres de gabarits ne sera plus prise en charge.L’attribut
HttpRequest.raw_post_dataa été renommé enHttpRequest.bodydans 1.4. La rétrocompatibilité sera supprimée –HttpRequest.raw_post_datane sera plus disponible.La valeur du paramètre
post_url_continuedansModelAdmin.response_add()devra soit valoirNone(pour rediriger vers la page d’édition de l’objet nouvellement créé) soit contenir une URL préformatée. Les substitutions de chaînes, telles que la valeur par défaut précédente'../%s/', ne seront plus acceptées.
1.5¶
Consultez les notes de publication de Django 1.3 pour plus de détails sur ces changements.
Le lancement de Django sans
SECRET_KEYproduira une exception au lieu d’un avertissementDeprecationWarning(le procédé d’obsolescence a été accéléré, voir les notes de publication de Django 1.4).Le gestionnaire de requête
mod_pythonsera supprimé. Le gestionnairemod_wsgidevrait être utilisé à la place.L’attribut
templatedes objetsdjango.test.client.Responserenvoyés par le client de test sera supprimé. L’attributtemplatesdevrait être utilisé à la place.django.test.simple.DjangoTestRunnersera supprimé. Utilisez à la place une classe intégrée deunittest. Les fonctionnalités dedjango.test.simple.DjangoTestRunner(y compris l’échec rapide et l’interruption des tests par Ctrl-C) sont aussi disponibles dansunittest.TextTestRunner.La fonction non documentée
django.contrib.formtools.utils.security_hashsera supprimée. Utilisezdjango.contrib.formtools.utils.form_hmacà la place.Les modules de vues génériques basées sur les fonctions seront supprimés en faveur de leurs équivalents basés sur des classes, comme expliqué ici.
django.core.servers.basehttp.AdminMediaHandlersera supprimé. Utilisezdjango.contrib.staticfiles.handlers.StaticFilesHandlerà sa place.La bibliothèque de balises de gabarits
adminmediaet la balise de gabarit{% admin_media_prefix %}seront supprimés en faveur de la gestion générique des fichiers statiques (suppression accélérée par rapport au processus d’obsolescence habituel, voir les notes de publication de Django 1.4).Les balises de gabarit
urletssiseront modifiées pour que le premier argument de chaque balise soit une variable de gabarit et non automatiquement une chaîne. Dans 1.4, ce comportement est fourni par une version de la balise dans la bibliothèque de balises de gabaritsfuture.Les commandes d’administration
resetetsqlresetseront supprimées.Les moteurs d’authentification devront prendre en charge un utilisateur inactif transmis à toutes les méthodes s’occupant de permissions. L’attribut
supports_inactive_userne sera plus pris en compte et peut être supprimé de tout moteur personnalisé.transform()générera une exceptionGEOSExceptionlorsqu’on lui transmet une géométrie sans valeur de SRID.django.http.CompatCookiesera supprimée en faveur dedjango.http.SimpleCookie.django.core.context_processors.PermWrapperetdjango.core.context_processors.PermLookupDictseront supprimés en faveur de respectivementdjango.contrib.auth.context_processors.PermWrapperetdjango.contrib.auth.context_processors.PermLookupDict.Les réglages
MEDIA_URLetSTATIC_URLdevront obligatoirement se terminer par une barre oblique pour s’assurer que la manière de combiner les chemins dans les gabarits soit harmonisée.django.db.models.fields.URLField.verify_existssera supprimée. La fonctionnalité a été rendue obsolète dans 1.3.1 en raison de problèmes de sécurité et de performance insurmontables, et son obsolescence a donc été accélérée.Les traductions situées au niveau du chemin du projet sont ignorées durant le processus de construction des traductions au moment de l’exécution. Le réglage
LOCALE_PATHSpeut être utilisé pour la même tâche en incluant comme valeur le chemin sur le système de fichiers vers un répertoirelocalecontenant des traductions non liées à une application précise.L’application contribuée Markup ne prendra plus en charge les versions de la bibliothèque Python-Markdown plus anciennes que la 2.1. Une obsolescence accélérée a été choisie car il s’agissait d’une obsolescence liée à la sécurité.
Le réglage
CACHE_BACKENDsera supprimé. Les moteurs de cache doivent être indiqués dans le réglageCACHES.
1.4¶
Consultez les notes de publication de Django 1.2 pour plus de détails sur ces changements.
CsrfResponseMiddlewareetCsrfMiddlewareseront supprimés. Utilisez la balise de gabarit{% csrf_token %}dans les formulaires pour activer la protection CSRF.CsrfViewMiddlewareest conservée et activée par défaut.Les anciennes importations de fonctionnalité CSRF (
django.contrib.csrf.*), qui sont passées dans le cœur Django dans la version 1.2 seront supprimées.Le module
django.contrib.gis.db.backendsera supprimé en faveur des moteurs spécifiques.SMTPConnectionsera supprimée en faveur d’une API générique de moteur de courriels.Les fonctions de génération SQL plusieurs-à-plusieurs des moteurs de base de données seront supprimées.
La possibilité d’utiliser la famille de réglages de premier niveau
DATABASE_*pour définir les connexions de base de données sera supprimée.La possibilité d’utiliser une notation raccourcie pour pointer vers un moteur de base de données (par ex.
sqlite3au lieu dedjango.db.backends.sqlite3) sera supprimée.Les méthodes
get_db_prep_save,get_db_prep_valueetget_db_prep_lookupdevront prendre en charge les bases de données multiples.Le modèle
Message(dansdjango.contrib.auth), son gestionnaire d’objets liés dans le modèleUser(user.message_set) et ses méthodes associées (user.message_set.create()etuser.get_and_delete_messages()) seront supprimées. Il est recommandé d’utiliser l’infrastructure des messages à la place. La variable liéemessagesrenvoyée par le processeur de contexteauthsera également supprimée. Notez que cela signifie que l’application admin va dépendre du processeur de contexte des messages.Les moteurs d’authentification devront prendre en charge le paramètre
objpour le contrôle des permissions. L’attributsupports_object_permissionsne sera plus pris en compte et peut être supprimé de tout moteur personnalisé.Les moteurs d’authentification devront prendre en charge la classe
AnonymousUsertransmise à toutes les méthodes s’occupant de permissions. La variablesupports_anonymous_userne sera plus prise en compte et peut être supprimée de tout moteur personnalisé.La possibilité d’indiquer une chargeur de gabarit sous forme d’exécutable plutôt que d’une classe
Loadersera supprimée, tout comme les fonctionsload_template_sourcequi sont incluses avec les chargeurs de gabarits intégrés par rétrocompatibilité.django.utils.translation.get_date_formats()etdjango.utils.translation.get_partial_date_formats(). Ces fonctions seront supprimées ; utilisez django.utils.formats.get_format()` qui est sensible à la locale active pour obtenir les bons formats.Dans
django.forms.fields, les constantesDEFAULT_DATE_INPUT_FORMATS,DEFAULT_TIME_INPUT_FORMATSetDEFAULT_DATETIME_INPUT_FORMATSseront supprimées. Utilisezdjango.utils.formats.get_format()pour obtenir les formats appropriés.La possibilité d’utiliser un lanceur de tests basé sur une fonction sera supprimée, de même que le lanceur de tests
django.test.simple.run_tests().La vue
views.feed()et la classefeeds.Feeddansdjango.contrib.syndicationseront supprimées. La vue basée sur une classeviews.Feeddoit être utilisée à la place.django.core.context_processors.auth. Cette publication va supprimer l’ancienne méthode en faveur de la nouvelle méthode dansdjango.contrib.auth.context_processors.auth.Le moteur de base de données
postgresqlsera supprimé, utilisez à la place le moteurpostgresql_psycopg2.Le code de langue
nosera supprimé car il a été remplacé par le code de languenb.Les moteurs d’authentification devront définir l’attribut booléen
supports_inactive_userjusqu’à la version 1.5 qui considérera comme acquis le fait que tous les moteurs savent gérer les utilisateurs inactifs.django.db.models.fields.XMLFieldsera supprimée. Elle a été rendue obsolète dans la version 1.3. Une obsolescence accélérée a été choisie car ce champ n’avait déjà plus aucune fonction supplémentaire qu’un simpleTextFielddepuis la suppression deoldforms. Toutes les occurrences deXMLFieldpeuvent être remplacées par le type de champTextField.Le paramètre non documenté
mixinde la méthodeopen()dedjango.core.files.storage.Storage(et ses sous-classes) sera supprimé.
1.3¶
Consultez les notes de publication de Django 1.1 pour plus de détails sur ces changements.
AdminSite.root(). Cette méthode de branchement des URL d’administration sera supprimée en faveur de l’inclusion deadmin.site.urls.Les moteurs d’authentification doivent définir les attributs booléens
supports_object_permissionsetsupports_anonymous_userjusqu’à la version 1.4, après quoi Django supposera que tous les moteurs savent gérer ces options.