Django 2.0 release notes¶
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.
Kompatibilitet med Python¶
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.
Stöd för tredjepartsbibliotek för äldre versioner av Django¶
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.
Vad är nytt i Django 2.0¶
Förenklad syntax för URL-routning¶
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.
Mobilvänlig 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.
Uttryck i fönster¶
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.
Mindre funktioner¶
django.contrib.admin
¶
Det nya attributet
ModelAdmin.autocomplete_fields
och metodenModelAdmin.get_autocomplete_fields()
gör det möjligt att använda en sökwidget Select2 förForeignKey
ochManyToManyField
.
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
ochLineLocatePoint
, 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
ochmetadata
.Tillåtet att skicka drivrutinsspecifika skapelsealternativ till
GDALRaster
-objekt med hjälp avpapsz_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örArrayAgg
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 nyaCryptoExtension
migreringsoperationen.django.contrib.postgres.indexes.GinIndex
stöder nu parametrarnafastupdate
ochgin_pending_list_limit
.Den nya
GistIndex
-klassen gör det möjligt att skapaGiST
-index i databasen. Den nyaBtreeGistExtension
-migreringsoperationen installerarbtree_gist
-tillägget för att lägga till stöd för operatörsklasser som inte är inbyggda.inspectdb
kan nu introspekteraJSONField
och olikaRangeField
(django.contrib.postgres
måste finnas iINSTALLED_APPS
).
django.contrib.sitemaps
¶
Lade till nyckelordsargumentet
protocol
tillGenericSitemap
-konstruktören.
Cache¶
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.
Fil delning¶
File.open()
kan användas som en kontexthanterare, t.ex.med file.open() som f:
.
Formulär¶
De nya argumenten
date_attrs
ochtime_attrs
förSplitDateTimeWidget
ochSplitHiddenDateTimeWidget
gör det möjligt att ange olika HTML-attribut för underwidgetarnaDateInput
ochTimeInput
(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.
Generiska åsikter¶
Det nya attributet
ContextMixin.extra_context
gör det möjligt att lägga till kontext iView.as_view()
.
Kommandon för hantering¶
inspectdb
översätter nu MySQL:s osignerade heltalskolumner tillPositiveIntegerField
ellerPositiveSmallIntegerField
.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 introspekteraAutoField
om kolumnen är skapad som en identitetskolumn.I MySQL har
dbshell
nu stöd för TLS-certifikat på klientsidan.
Migreringar¶
Det nya alternativet
squashmigrations --squashed-name
gör det möjligt att namnge den krossade migreringen.
Modeller¶
Den nya
StrIndex
databasfunktionen hittar startindexet för en sträng inuti en annan sträng.I Oracle skapas nu
AutoField
ochBigAutoField
som identitetskolumner.Den nya parametern
chunk_size
iQuerySet.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()
, ochMeta.get_latest_by
tillåter nu beställning av flera fält.Lade till funktionen
ExtractQuarter
för att extrahera kvartalet frånDateField
ochDateTimeField
, och exponerade den genomquarter
lookup.Lagt till funktionen
TruncQuarter
för att trunkeraDateField
ochDateTimeField
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 medDurationField
.Lade till argumentet
of
tillQuerySet.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 medselect_related()
.Den nya parametern
field_name
iQuerySet.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
iQuerySet.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 enON
-klausul i frågeuppsättningar.
Sidindelning¶
Lagt till
Paginator.get_page()
för att tillhandahålla det dokumenterade mönstret för hantering av ogiltiga sidnummer.
Förfrågningar och svar¶
Webbservern
runserver
har stöd för HTTP 1.1.
Mallar¶
För att öka användbarheten av
Engine.get_default()
i tredjepartsappar returnerar den nu den första motorn om fleraDjangoTemplates
-motorer är konfigurerade iTEMPLATES
istället för att höjaImproperlyConfigured
.Anpassade malltaggar kan nu acceptera argument som endast innehåller nyckelord.
Tester¶
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
ochDATAFILE_TMP_EXTSIZE
.
Validerare¶
Den nya
ProhibitNullCharactersValidator
tillåter inte nolltecken i inmatningen i formulärfältetCharField
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.
Bakåtkompatibla ändringar i 2.0¶
Borttaget stöd för bytestrings på vissa ställen¶
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()
.
Databas backend API¶
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()
ochdate_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 numodel
istället förtable
.Det första argumentet i
SchemaEditor._create_index_name()
är nutable_name
istället förmodel
.För att aktivera stöd för
FOR UPDATE OF
angesDatabaseFeatures.has_select_for_update_of = True
. Om databasen kräver att argumenten tillOF
ska vara kolumner i stället för tabeller, anger duDatabaseFeatures.select_for_update_of_column = True
.För att aktivera stöd för
Window
uttryck, ställ inDatabaseFeatures.supports_over_clause
tillTrue
. Du kan behöva anpassa metodernaDatabaseOperations.window_start_rows_start_end()
och/ellerwindow_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 iCast
-funktionen för enCharField
om argumentetmax_length
inte tillhandahålls.Det första argumentet i
DatabaseCreation._clone_test_db()
ochget_test_db_clone_settings()
är nuuffix
snarare ännummer
(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 iBaseDatabaseIntrospection
.
Upphört stöd för Oracle 11.2¶
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å är read committed¶
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.
Formulärfält accepterar inte längre valfria argument som positionella argument¶
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", ...)
Index accepterar inte längre positionella argument¶
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")
Foreign key constraints är nu aktiverade i SQLite¶
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
.
Diverse¶
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ängreNoReverseMatch
ompattern_name
inte existerar.När
USE_L10N
är av respekterar nuFloatField
ochDecimalField
DECIMAL_SEPARATOR
ochTHOUSAND_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 till1345
istället för1,345
.Underklasser av
AbstractBaseUser
behöver inte längre implementeraget_short_name()
ochget_full_name()
. (Basimplementeringarna som ger upphov tillNotImplementedError
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
ochNUMBER_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 avassertNumQueries()
-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 parameternchunk_size
. Till exempel:Book.objects.iterator(chunk_size=100)
Om okända paketnamn anges i argumentet
packages
i vynJavaScriptCatalog
utlöses nuValueError
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ältetslimit_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 iCacheKeyWarning
arv avRuntimeWarning
.Bytte namn på
BaseExpression._output_field
tilloutput_field
. Du kan behöva uppdatera anpassade uttryck.I äldre versioner kombinerar formulär och formuläruppsättningar sin
Media
med widgetensMedia
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örGDALException
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 avconnection.ops.select
. Se :ref:``Raw queries note<gis-raw-sql>` i GIS-handledningen för ett exempel.
Funktioner som inte längre är aktuella i 2.0¶
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.
Diverse¶
Modulen
django.db.backends.postgresql_psycopg2
är utfasad till förmån fördjango.db.backends.postgresql
. Det har varit ett alias sedan Django 1.9. Detta påverkar endast kod som importerar från modulen direkt. InställningenDATABASER
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ördjango.shortcuts.render()
.render()
tar samma argument förutom att det också kräver enrequest
.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
tillQuerySet.earliest()
ochQuerySet.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')
.
Funktioner borttagna i 2.0¶
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
tilldjango.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
tillSimpleTestCase.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
ochField.remote_field.to
har tagits bort.Argumentet
on_delete
förForeignKey
ochOneToOneField
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
ochGeoQuerySet
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
ochload_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ördjango.utils.feedgenerator.Atom1Feed
ochdjango.utils.feedgenerator.RssFeed
har tagits bort.Argumentet
app_name
tillinclude()
tas bort.Stöd för att skicka en 3-tupel (inklusive
admin.site.urls
) som det första argumentet tillinclude()
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 vyernacontrib.auth
har tagits bort.Nyckelordsargumentet
callable_obj
tillSimpleTestCase.assertRaisesMessage()`
har tagits bort.Stöd för attributet
allow_tags
påModelAdmin
-metoder har tagits bort.Nyckelordsargumentet
enclosure
tillSyndicationFeed.add_item()
har tagits bort.Aliasen
django.template.loader.LoaderOrigin
ochdjango.template.base.StringOrigin
fördjango.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()
ochset_srid()
idjango.contrib.gis.geos.GEOSGeometry
tas bort.Metoderna
get_x()
,set_x()
,get_y()
,set_y()
,get_z()
ochset_z()
idjango.contrib.gis.geos.Point
tas bort.Metoderna
get_coords()
ochset_coords()
idjango.contrib.gis.geos.Point
tas bort.Egenskapen
cascaded_union
fördjango.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()
ochmodified_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()
ochUser.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
iField.contribute_to_class()
ochvirtual
iModel._meta.add_field()
tas bort.Vyerna
javascript_catalog()
ochjson_catalog()
är borttagna.django.contrib.gis.utils.precision_wkt()
har tagits bort.I multi-table inheritance tas implicit promotion av en
OneToOneField
till enparent_link
bort.Stöd för
Widget._format_value()
har tagits bort.metoderna
FileField
get_directory_name()
ochget_filename()
har tagits bort.Funktionen
mark_for_escaping()
och de klasser den använder:EscapeData
,EscapeBytes
,EscapeText
,EscapeString
ochEscapeUnicode
tas bort.Filtret
escape
använder nudjango.utils.html.conditional_escape()
.Manager.use_for_related_fields
har tagits bort.Modellens
Manager
-arv följer MRO-arvsreglerna. Kravet på att användaMeta.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.