2 december 2017
Välkommen till Django 2.0!
Dessa release notes täcker de nya funktionerna, samt några bakåtkompatibla ändringar som du vill vara medveten om när du uppgraderar från Django 1.11 eller tidigare. Vi har ta bort några funktioner som har nått slutet av sin utfasningscykel, och vi har startat utfasningsprocessen för några funktioner.
Denna utgåva börjar Djangos användning av en lös form av semantisk versionshantering, men det finns inga större bakåtkompatibla ändringar som kan förväntas av en 2.0-utgåva. Uppgradering bör vara en liknande mängd ansträngning som tidigare funktionsutgåvor.
Se guiden Så här uppgraderar du Django till en nyare version om du ska uppdatera ett befintligt projekt.
Django 2.0 stöder Python 3.4, 3.5, 3.6 och 3.7. Vi rekommenderar starkt och stöder endast officiellt den senaste versionen av varje serie.
Django 1.11.x-serien är den sista som stöder Python 2.7.
Django 2.0 kommer att vara den sista utgåveserien som stöder Python 3.4. Om du planerar en distribution av Python 3.4 bortom slutet av livscykeln för Django 2.0 (april 2019), håll dig till Django 1.11 LTS (stöds fram till april 2020) istället. Observera dock att slutdatumet för Python 3.4 är mars 2019.
Efter lanseringen av Django 2.0 föreslår vi att tredjepartsappförfattare släpper stödet för alla versioner av Django före 1.11. Vid den tidpunkten bör du kunna köra ditt pakets tester med hjälp av python -Wd så att varningar om utdatering visas. Efter att du har åtgärdat varningarna för utfasning bör din app vara kompatibel med Django 2.0.
Den nya funktionen django.urls.path() möjliggör en enklare och mer läsbar syntax för URL-routing. Till exempel detta exempel från tidigare Django-versioner:
url(r"^articles/(?P<year>[0-9]{4})/$", views.year_archive),
skulle kunna skrivas som:
path("articles/<int:year>/", views.year_archive),
Den nya syntaxen stöder typkoercition av URL-parametrar. I exemplet kommer vyn att ta emot nyckelordsargumentet year som ett heltal snarare än som en sträng. Dessutom är de webbadresser som kommer att matcha något mindre begränsade i det omskrivna exemplet. Till exempel kommer år 10000 nu att matcha eftersom årtalen inte är begränsade till att vara exakt fyra siffror långa som de är i det reguljära uttrycket.
Funktionen django.conf.urls.url() från tidigare versioner är nu tillgänglig som django.urls.re_path(). Den gamla platsen finns kvar för bakåtkompatibilitet, utan en överhängande föråldring. Den gamla funktionen django.conf.urls.include() är nu importerbar från django.urls så att du kan använda from django.urls import include, path, re_path i dina URLconfs.
Dokumentet URL-distributör är omskrivet för att innehålla den nya syntaxen och ge mer information.
contrib.admin¶Administrationen är nu responsiv och stöder alla större mobila enheter. Äldre webbläsare kan uppleva varierande nivåer av graceful degradation.
Det nya Window-uttrycket gör det möjligt att lägga till en OVER-klausul till querysets. Du kan använda :ref:``window functions <window-functions>` och :ref:``aggregate functions <aggregation-functions>` i uttrycket.
django.contrib.admin¶Det nya attributet ModelAdmin.autocomplete_fields och metoden ModelAdmin.get_autocomplete_fields() gör det möjligt att använda en sökwidget Select2 för ForeignKey och ManyToManyField.
django.contrib.auth¶Standardantalet iterationer för PBKDF2-lösenordshashen ökas från 36 000 till 100 000.
django.contrib.gis¶Lagt till MySQL-stöd för funktionen AsGeoJSON, GeoHash, IsValid, isvalid lookup, och distance lookups.
Lade till funktionerna Azimuth och LineLocatePoint, som stöds av PostGIS och SpatiaLite.
Alla GEOSGeometry som importeras från GeoJSON har nu sin SRID inställd.
Lagt till attributet OSMWidget.default_zoom för att anpassa kartans standardzoomnivå.
Gjorde metadata läsbara och redigerbara på raster genom attributen metadata, info och metadata.
Tillåtet att skicka drivrutinsspecifika skapelsealternativ till GDALRaster-objekt med hjälp av papsz_options.
Tillåtet att skapa GDALRaster-objekt i GDAL:s interna virtuella filsystem. Raster kan nu skapas från och konverteras till binärdata i minnet.
Den nya metoden GDALBand.color_interp() returnerar färgtolkningen för bandet.
django.contrib.postgres¶Det nya argumentet distinct för ArrayAgg avgör om sammanlänkade värden ska vara distinkta.
Den nya RandomUUID databasfunktionen returnerar en version 4 UUID. Det kräver användning av PostgreSQL: s ``pgcrypto `` förlängning som kan aktiveras med den nya CryptoExtension migreringsoperationen.
django.contrib.postgres.indexes.GinIndex stöder nu parametrarna fastupdate och gin_pending_list_limit.
Den nya GistIndex-klassen gör det möjligt att skapa GiST-index i databasen. Den nya BtreeGistExtension-migreringsoperationen installerar btree_gist-tillägget för att lägga till stöd för operatörsklasser som inte är inbyggda.
inspectdb kan nu introspektera JSONField och olika RangeField (django.contrib.postgres måste finnas i INSTALLED_APPS).
django.contrib.sitemaps¶Lade till nyckelordsargumentet protocol till GenericSitemap-konstruktören.
cache.set_many() returnerar nu en lista över nycklar som inte kunde infogas. För de inbyggda backends kan misslyckade inmatningar endast ske på memcached.
File.open() kan användas som en kontexthanterare, t.ex. med file.open() som f:.
De nya argumenten date_attrs och time_attrs för SplitDateTimeWidget och SplitHiddenDateTimeWidget gör det möjligt att ange olika HTML-attribut för underwidgetarna DateInput och TimeInput (eller dolda).
Den nya Form.errors.get_json_data()-metoden returnerar formulärfel som en ordbok som är lämplig att inkludera i ett JSON-svar.
Det nya attributet ContextMixin.extra_context gör det möjligt att lägga till kontext i View.as_view().
inspectdb översätter nu MySQL:s osignerade heltalskolumner till PositiveIntegerField eller PositiveSmallIntegerField.
Det nya alternativet makemessages --add-location styr kommentarsformatet i .po-filer.
loaddata kan nu läsa från stdin.
Det nya alternativet diffsettings --output gör det möjligt att formatera utdata i ett enhetligt diff-format.
På Oracle kan inspectdb nu introspektera AutoField om kolumnen är skapad som en identitetskolumn.
I MySQL har dbshell nu stöd för TLS-certifikat på klientsidan.
Det nya alternativet squashmigrations --squashed-name gör det möjligt att namnge den krossade migreringen.
Den nya StrIndex databasfunktionen hittar startindexet för en sträng inuti en annan sträng.
I Oracle skapas nu AutoField och BigAutoField som identitetskolumner.
Den nya parametern chunk_size i QuerySet.iterator() styr antalet rader som hämtas av Python-databasklienten när resultat strömmas från databasen. För databaser som inte stöder markörer på serversidan kontrollerar den antalet resultat som Django hämtar från databasadaptern.
QuerySet.earliest(), QuerySet.latest(), och Meta.get_latest_by tillåter nu beställning av flera fält.
Lade till funktionen ExtractQuarter för att extrahera kvartalet från DateField och DateTimeField, och exponerade den genom quarter lookup.
Lagt till funktionen TruncQuarter för att trunkera DateField och DateTimeField till den första dagen i ett kvartal.
Lagt till parametern db_tablespace för klassbaserade index.
Om databasen stöder ett inbyggt varaktighetsfält (Oracle och PostgreSQL), fungerar Extract nu med DurationField.
Lade till argumentet of till QuerySet.select_for_update() `, som stöds på PostgreSQL och Oracle, för att bara låsa rader från specifika tabeller snarare än alla valda tabeller. Det kan vara till hjälp särskilt när :meth:`~.QuerySet.select_for_update() används tillsammans med select_related().
Den nya parametern field_name i QuerySet.in_bulk() gör det möjligt att hämta resultat baserat på alla unika modellfält.
CursorWrapper.callproc() tar nu en valfri ordlista med nyckelordsparametrar, om backend stöder denna funktion. Av Djangos inbyggda backends är det bara Oracle som stödjer detta.
Den nya metoden connection.execute_wrapper() gör det möjligt att installera omslag runt exekvering av databasfrågor.
Det nya filter-argumentet för inbyggda aggregat gör det möjligt att :ref:lägga till olika villkor <conditional-aggregation> till flera aggregat över samma fält eller relationer.
Lagt till stöd för uttryck i Meta.ordering.
Den nya parametern named i QuerySet.values_list() gör det möjligt att hämta resultat som namngivna tuples.
Den nya klassen FilteredRelation gör det möjligt att lägga till en ON-klausul i frågeuppsättningar.
Lagt till Paginator.get_page() för att tillhandahålla det dokumenterade mönstret för hantering av ogiltiga sidnummer.
Webbservern runserver har stöd för HTTP 1.1.
För att öka användbarheten av Engine.get_default() i tredjepartsappar returnerar den nu den första motorn om flera DjangoTemplates-motorer är konfigurerade i TEMPLATES istället för att höja ImproperlyConfigured.
Anpassade malltaggar kan nu acceptera argument som endast innehåller nyckelord.
Lagt till stöd för trådning i LiveServerTestCase.
Lagt till inställningar som gör det möjligt att anpassa parametrarna för testtabellutrymmen för Oracle: DATAFILE_SIZE, DATAFILE_TMP_SIZE, DATAFILE_EXTSIZE och DATAFILE_TMP_EXTSIZE.
Den nya ProhibitNullCharactersValidator tillåter inte nolltecken i inmatningen i formulärfältet CharField och dess underklasser. Inmatning av nolltecken observerades från verktyg för sårbarhetsskanning. De flesta databaser kasserar tyst nolltecken, men psycopg2 2.7+ ger upphov till ett undantag när man försöker spara ett nolltecken i ett char/text-fält med PostgreSQL.
För att stödja inbyggda Python 2-strängar var äldre Django-versioner tvungna att acceptera både bytestrings och Unicode-strängar. Nu när Python 2-stödet är borttaget bör bytestrings endast påträffas runt inmatnings-/utmatningsgränser (hantering av binära fält eller HTTP-strömmar, till exempel). Du kan behöva uppdatera din kod för att begränsa användningen av bytestringar till ett minimum, eftersom Django inte längre accepterar bytestringar i vissa kodvägar. Pythons -b-alternativ kan hjälpa till att upptäcka detta misstag i din kod.
Till exempel använder reverse() nu str() i stället för force_text() för att tvinga fram de args och kwargs som tas emot innan de placeras i URL:en. För bytestrings skapar detta en sträng med ett oönskat b-prefix samt ytterligare citattecken (str(b'foo') är "b'foo'"). För att anpassa dig, anropa decode() på bytestringen innan du skickar den till reverse().
I det här avsnittet beskrivs ändringar som kan behövas i tredjeparts databasbackends.
Metoderna DatabaseOperations.datetime_cast_date_sql(), datetime_cast_time_sql(), datetime_trunc_sql(), datetime_extract_sql() och date_interval_sql() returnerar nu endast SQL för att utföra åtgärden istället för SQL och en lista med parametrar.
Tredjeparts databasbackends bör lägga till ett DatabaseWrapper.display_name-attribut med namnet på databasen som din backend arbetar med. Django kan använda det i olika meddelanden, till exempel i systemkontroller.
Det första argumentet i SchemaEditor._alter_column_type_sql() är nu model istället för table.
Det första argumentet i SchemaEditor._create_index_name() är nu table_name istället för model.
För att aktivera stöd för FOR UPDATE OF anges DatabaseFeatures.has_select_for_update_of = True. Om databasen kräver att argumenten till OF ska vara kolumner i stället för tabeller, anger du DatabaseFeatures.select_for_update_of_column = True.
För att aktivera stöd för Window uttryck, ställ in DatabaseFeatures.supports_over_clause till True. Du kan behöva anpassa metoderna DatabaseOperations.window_start_rows_start_end() och/eller window_start_range_start_end().
Tredjeparts databasbackends bör lägga till ett DatabaseOperations.cast_char_field_without_max_length-attribut med databasdatatypen som kommer att användas i Cast-funktionen för en CharField om argumentet max_length inte tillhandahålls.
Det första argumentet i DatabaseCreation._clone_test_db() och get_test_db_clone_settings() är nu uffix snarare än nummer (om du vill byta namn på signaturerna i din backend för konsekvens). django.test skickar nu också dessa värden som strängar snarare än som heltal.
Tredjeparts databas backends bör lägga till en DatabaseIntrospection.get_sequences() metod baserad på stubben i BaseDatabaseIntrospection.
Slutet på uppströmsstöd för Oracle 11.2 är december 2020. Django 1.11 kommer att stödjas fram till april 2020 vilket nästan når detta datum. Django 2.0 stöder officiellt Oracle 12.1+.
MySQL:s standardisoleringsnivå, repeatable read, kan orsaka dataförlust vid typisk Django-användning. För att förhindra detta och för att vara konsekvent med andra databaser är standardisoleringsnivån nu read committed. Du kan använda inställningen DATABASER för att använda en annan isoleringsnivå, om det behövs.
AbstractUser.last_name <django.contrib.auth.models.User.last_name>` max_length ökad till 150¶En migrering för django.contrib.auth.models.User.last_name ingår. Om du har en anpassad användarmodell som ärver från AbstractUser måste du generera och tillämpa en databasmigrering för din användarmodell.
Om du vill behålla gränsen på 30 tecken för efternamn kan du använda ett anpassat formulär:
from django.contrib.auth.forms import UserChangeForm
class MyUserChangeForm(UserChangeForm):
last_name = forms.CharField(max_length=30, required=False)
Om du vill behålla denna begränsning i administratören när du redigerar användare, ställ in UserAdmin.form för att använda detta formulär:
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
QuerySet.reverse() och last() är förbjudna efter skärning¶Att anropa QuerySet.reverse() eller last() på en skivad frågeuppsättning leder till oväntade resultat på grund av att skivningen tillämpas efter omordning. Detta är nu förbjudet, t.ex:
>>> Model.objects.all()[:2].reverse()
Traceback (most recent call last):
...
TypeError: Cannot reverse a query once a slice has been taken.
För att förhindra körtidsfel på grund av felaktig ordning på formulärfältsargument accepteras inte längre valfria argument i inbyggda formulärfält som positionsargument. Till exempel:
forms.IntegerField(25, 10)
ger upphov till ett undantag och bör ersättas med:
forms.IntegerField(max_value=25, min_value=10)
call_command() validerar de alternativ den tar emot¶call_command() validerar nu att argumentparsern för kommandot som anropas definierar alla alternativ som skickas till call_command().
För anpassade hanteringskommandon som använder alternativ som inte skapats med parser.add_argument(), lägg till ett stealth_options-attribut på kommandot:
class MyCommand(BaseCommand):
stealth_options = ("option_name", ...)
Till exempel:
models.Index(["headline", "-pub_date"], "index_name")
ger upphov till ett undantag och bör ersättas med:
models.Index(fields=["headline", "-pub_date"], name="index_name")
Detta kommer att visas som en bakåtkompatibel ändring (IntegrityError: FOREIGN KEY constraint failed) om du försöker spara en befintlig modellinstans som bryter mot en främmande nyckelbegränsning.
Utländska nycklar skapas nu med DEFERRABLE INITIALLY DEFERRED istället för DEFERRABLE IMMEDIATE. Därför kan tabeller behöva byggas om för att återskapa främmande nycklar med den nya definitionen, särskilt om du använder ett mönster som detta:
from django.db import transaction
with transaction.atomic():
Book.objects.create(author_id=1)
Author.objects.create(id=1)
Om du inte återskapar den främmande nyckeln som DEFERRED kommer den första create() att misslyckas nu när begränsningar för främmande nycklar tillämpas.
Säkerhetskopiera din databas först! När du har uppgraderat till Django 2.0 kan du sedan bygga om tabeller med hjälp av ett skript som liknar detta:
from django.apps import apps
from django.db import connection
for app in apps.get_app_configs():
for model in app.get_models(include_auto_created=True):
if model._meta.managed and not (model._meta.proxy or model._meta.swapped):
for base in model.__bases__:
if hasattr(base, "_meta"):
base._meta.local_many_to_many = []
model._meta.local_many_to_many = []
with connection.schema_editor() as editor:
editor._remake_table(model)
Detta skript har inte genomgått omfattande tester och behöver anpassas för olika fall, t.ex. flera databaser. Du är välkommen att bidra med förbättringar.
På grund av en tabelländringsbegränsning i SQLite är det dessutom förbjudet att utföra RenameModel och RenameField på modeller eller fält som refereras av andra modeller i en transaktion. För att tillåta att migreringar som innehåller dessa operationer tillämpas måste du ställa in attributet Migration.atomic till False.
Klassen SessionAuthenticationMiddleware tas bort. Den gav ingen funktionalitet eftersom sessionsautentisering är ovillkorligt aktiverad i Django 1.10.
Standard HTTP-felhanterare (handler404, etc.) är nu callables istället för prickade Python-sökvägssträngar. Django föredrar anropsbara referenser eftersom de ger bättre prestanda och felsökningsupplevelse.
RedirectView tystnar inte längre NoReverseMatch om pattern_name inte existerar.
När USE_L10N är av respekterar nu FloatField och DecimalField DECIMAL_SEPARATOR och THOUSAND_SEPARATOR under validering. Till exempel, med inställningarna:
USE_L10N = False
USE_THOUSAND_SEPARATOR = True
DECIMAL_SEPARATOR = ","
THOUSAND_SEPARATOR = "."
en inmatning av "1,345" konverteras nu till 1345 istället för 1,345.
Underklasser av AbstractBaseUser behöver inte längre implementera get_short_name() och get_full_name(). (Basimplementeringarna som ger upphov till NotImplementedError tas bort.) django.contrib.admin använder dessa metoder om de är implementerade men kräver dem inte. Tredjepartsappar som använder dessa metoder kanske vill anta ett liknande tillvägagångssätt.
Formatinställningarna FIRST_DAY_OF_WEEK och NUMBER_GROUPING sparas nu som heltal i JavaScript- och JSON i18n-vyutdata.
assertNumQueries() ignorerar nu frågor om anslutningskonfiguration. Tidigare, om ett test öppnade en ny databasanslutning, kunde dessa frågor inkluderas som en del av assertNumQueries()-räkningen.
Standardstorleken för Oracle test tablespace ökas från 20M till 50M och standardstorleken för autoextend ökas från 10M till 25M.
För att förbättra prestandan vid streaming av stora resultatuppsättningar från databasen hämtar QuerySet.iterator() nu 2000 rader åt gången istället för 100. Det gamla beteendet kan återställas med hjälp av parametern chunk_size. Till exempel:
Book.objects.iterator(chunk_size=100)
Om okända paketnamn anges i argumentet packages i vyn JavaScriptCatalog utlöses nu ValueError istället för att passera tyst.
En modellinstans primärnyckel visas nu i standardmetoden Model.__str__(), t.ex. Frågeobjekt (1).
makemigrations upptäcker nu ändringar i modellfältets limit_choices_to-alternativ. Lägg till detta i dina befintliga migreringar eller acceptera en automatiskt genererad migrering för fält som använder det.
Utförande av frågor som kräver automatiska rumsliga transformationer ger nu upphov till NotImplementedError på MySQL istället för att tyst använda icke-transformerade geometrier.
django.core.exceptions.DjangoRuntimeWarning är borttagen. Den användes endast i cache-backend som en mellanliggande klass i CacheKeyWarning arv av RuntimeWarning.
Bytte namn på BaseExpression._output_field till output_field. Du kan behöva uppdatera anpassade uttryck.
I äldre versioner kombinerar formulär och formuläruppsättningar sin Media med widgetens Media genom att konkatenera de två. Kombinationen försöker nu bevara den relativa ordningen på elementen i varje lista. MediaOrderConflictWarning utfärdas om ordningen inte kan bevaras.
django.contrib.gis.gdal.OGRException är borttagen. Det har varit ett alias för GDALException sedan Django 1.8.
Stöd för GEOS 3.3.x har tagits bort.
Sättet på vilket data väljs för GeometryField har ändrats för att förbättra prestanda, och i råa SQL-frågor måste dessa fält nu omslutas av connection.ops.select. Se :ref:``Raw queries note<gis-raw-sql>` i GIS-handledningen för ett exempel.
context argument för Field.from_db_value() och Expression.convert_value()¶Argumentet context i Field.from_db_value() och Expression.convert_value() är oanvänt eftersom det alltid är en tom ordbok. Signaturen för båda metoderna är nu:
(self, value, expression, connection)
istället för:
(self, value, expression, connection, context)
Stöd för den gamla signaturen i anpassade fält och uttryck finns kvar till Django 3.0.
Modulen django.db.backends.postgresql_psycopg2 är utfasad till förmån för django.db.backends.postgresql. Det har varit ett alias sedan Django 1.9. Detta påverkar endast kod som importerar från modulen direkt. Inställningen DATABASER kan fortfarande använda 'django.db.backends.postgresql_psycopg2', men du kan förenkla det genom att använda namnet 'django.db.backends.postgresql' som lades till i Django 1.9.
django.shortcuts.render_to_response() är föråldrad till förmån för django.shortcuts.render(). render() tar samma argument förutom att det också kräver en request.
Inställningen DEFAULT_CONTENT_TYPE är föråldrad. Den fungerar inte bra med tredjepartsappar och är föråldrad eftersom HTML5 till stor del har ersatt XHTML.
HttpRequest.xreadlines() är föråldrad till förmån för att iterera över begäran.
Nyckelordsargumentet field_name till QuerySet.earliest() och QuerySet.latest() är föråldrat till förmån för att skicka fältnamnen som argument. Skriv .earliest('pub_date') i stället för .earliest(field_name='pub_date').
Dessa funktioner har nått slutet av sin utfasningscykel och tas bort i Django 2.0.
Se Funktioner som inte längre är aktuella i 1.9 för detaljer om dessa ändringar, inklusive hur man tar bort användningen av dessa funktioner.
Argumentet weak till django.dispatch.signals.Signal.disconnect() har tagits bort.
django.db.backends.base.BaseDatabaseOperations.check_aggregate_support() har tagits bort.
Paketet django.forms.extras har tagits bort.
Hjälpverktyget assignment_tag tas bort.
Argumentet host till SimpleTestCase.assertsRedirects() har tagits bort. Kompatibilitetslagret som gör att absoluta URL:er kan betraktas som likvärdiga med relativa när sökvägen är identisk har också tagits bort.
Field.rel och Field.remote_field.to har tagits bort.
Argumentet on_delete för ForeignKey och OneToOneField krävs nu i modeller och migreringar. Överväg att komprimera migreringar så att du har färre av dem att uppdatera.
django.db.models.fields.add_lazy_relation() har tagits bort.
När stöd för tidszoner är aktiverat konverterar databasbackends som inte stöder tidszoner inte längre medvetna datatider till naiva värden i UTC när sådana värden skickas som parametrar till SQL-frågor som körs utanför ORM, t.ex. med cursor.execute().
django.contrib.auth.tests.utils.skipIfCustomUser() har tagits bort.
Klasserna GeoManager och GeoQuerySet tas bort.
Modulen django.contrib.gis.geoip har tagits bort.
`supports_recursion kontrollen för mallladdare är borttagen från:
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()
Mallinläsningsmetoderna load_template och load_template_sources har tagits bort.
Argumentet template_dirs för mallladdare har tagits bort:
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()`
django.template.loaders.base.Loader.__call__() tas bort.
Stöd för anpassade felvyer som inte accepterar en exception-parameter har tagits bort.
Attributet mime_type för django.utils.feedgenerator.Atom1Feed och django.utils.feedgenerator.RssFeed har tagits bort.
Argumentet app_name till include() tas bort.
Stöd för att skicka en 3-tupel (inklusive admin.site.urls) som det första argumentet till include() har tagits bort.
Stöd för att ange en URL-instansnamnrymd utan en applikationsnamnrymd har tagits bort.
Field._get_val_from_obj() har tagits bort.
django.template.loaders.eggs.Loader tas bort.
Parametern current_app för de funktionsbaserade vyerna contrib.auth har tagits bort.
Nyckelordsargumentet callable_obj till SimpleTestCase.assertRaisesMessage()` har tagits bort.
Stöd för attributet allow_tags på ModelAdmin-metoder har tagits bort.
Nyckelordsargumentet enclosure till SyndicationFeed.add_item() har tagits bort.
Aliasen django.template.loader.LoaderOrigin och django.template.base.StringOrigin för django.template.base.Origin har tagits bort.
Se Funktioner som inte längre är aktuella i 1.10 för detaljer om dessa ändringar.
Alternativet makemigrations --exit har tagits bort.
Stöd för direkt tilldelning till en omvänd främmande nyckel eller en relation mellan många och många har tagits bort.
Metoderna get_srid() och set_srid() i django.contrib.gis.geos.GEOSGeometry tas bort.
Metoderna get_x(), set_x(), get_y(), set_y(), get_z() och set_z() i django.contrib.gis.geos.Point tas bort.
Metoderna get_coords() och set_coords() i django.contrib.gis.geos.Point tas bort.
Egenskapen cascaded_union för django.contrib.gis.geos.MultiPolygon har tagits bort.
django.utils.functional.allow_lazy() har tagits bort.
Alternativet shell --plain har tagits bort.
Modulen django.core.urlresolvers tas bort till förmån för dess nya plats, django.urls.
CommaSeparatedIntegerField tas bort, med undantag för stöd i historiska migreringar.
Metoden Context.has_key() i mallen har tagits bort.
Stöd för metoderna django.core.files.storage.Storage.accessed_time(), created_time() och modified_time() har tagits bort.
Stöd för frågeuppslagningar som använder modellnamnet när Meta.default_related_name är inställt har tagits bort.
MySQL-uppslagsordet __search har tagits bort.
Shim för att stödja anpassade relaterade manager-klasser utan en _apply_rel_filters()-metod har tagits bort.
Att använda User.is_authenticated() och User.is_anonymous() som metoder istället för egenskaper stöds inte längre.
Attributet Model._meta.virtual_fields har tagits bort.
Nyckelordsargumenten virtual_only i Field.contribute_to_class() och virtual i Model._meta.add_field() tas bort.
Vyerna javascript_catalog() och json_catalog() är borttagna.
django.contrib.gis.utils.precision_wkt() har tagits bort.
I multi-table inheritance tas implicit promotion av en OneToOneField till en parent_link bort.
Stöd för Widget._format_value() har tagits bort.
metoderna FileField get_directory_name() och get_filename() har tagits bort.
Funktionen mark_for_escaping() och de klasser den använder: EscapeData, EscapeBytes, EscapeText, EscapeString och EscapeUnicode tas bort.
Filtret escape använder nu django.utils.html.conditional_escape().
Manager.use_for_related_fields har tagits bort.
Modellens Manager-arv följer MRO-arvsreglerna. Kravet på att använda Meta.manager_inheritance_from_future för att välja beteendet tas bort.
Stöd för gammaldags middleware med settings.MIDDLEWARE_CLASSES har tagits bort.
aug. 11, 2025