Django 3.1 versionsinformation¶
4 augusti 2020
Välkommen till Django 3.1!
Dessa versionsinformation täcker de nya funktionerna, samt några bakåtkompatibla förändringar som du vill vara medveten om när du uppgraderar från Django 3.0 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.
Se guiden Så här uppgraderar du Django till en nyare version om du ska uppdatera ett befintligt projekt.
Kompatibilitet med Python¶
Django 3.1 stöder Python 3.6, 3.7, 3.8 och 3.9 (från och med 3.1.3). Vi rekommenderar starkt och stöder endast officiellt den senaste versionen av varje serie.
Vad är nytt i Django 3.1¶
Asynkrona vyer och stöd för middleware¶
Django stöder nu en helt asynkron sökväg, inklusive:
För att komma igång med asynkrona vyer måste du deklarera en vy med hjälp av async def:
async def my_view(request):
await asyncio.sleep(0.5)
return HttpResponse("Hello, async world!")
Alla asynkrona funktioner stöds oavsett om du kör i WSGI- eller ASGI-läge. Det blir dock prestandaförluster om du använder asynkron kod i WSGI-läge. Du kan läsa mer om detaljerna i dokumentationen Asynkront stöd.
Det står dig fritt att blanda asynkrona och synkroniserade vyer, middleware och tester så mycket du vill. Django kommer att se till att du alltid hamnar i rätt exekveringskontext. Vi förväntar oss att de flesta projekt kommer att hålla majoriteten av sina vyer synkrona och bara ha ett fåtal utvalda som körs i async-läge - men det är helt ditt val.
Djangos ORM, cache-lager och andra delar av koden som gör långvariga nätverksanrop har ännu inte stöd för asynkron åtkomst. Vi förväntar oss att lägga till stöd för dem i kommande utgåvor. Asynkrona vyer är idealiska, men om du gör många API- eller HTTP-anrop i din vy kan du nu göra alla dessa HTTP-anrop parallellt för att avsevärt påskynda vyns exekvering.
Asynkront stöd bör vara helt bakåtkompatibelt och vi har försökt se till att det inte har några hastighetsregressioner för din befintliga synkrona kod. Det bör inte ha någon märkbar effekt på några befintliga Django-projekt.
JSONField för alla stödda databasbackends¶
Django innehåller nu models.JSONField och forms.JSONField som kan användas på alla stödda databasbackends. Båda fälten stöder användningen av anpassade JSON-kodare och -avkodare. Modellfältet stöder introspektion, lookups och transformationer som tidigare endast var PostgreSQL:
from django.db import models
class ContactInfo(models.Model):
data = models.JSONField()
ContactInfo.objects.create(
data={
"name": "John",
"cities": ["London", "Cambridge"],
"pets": {"dogs": ["Rufus", "Meg"]},
}
)
ContactInfo.objects.filter(
data__name="John",
data__pets__has_key="dogs",
data__cities__contains="London",
).delete()
Om ditt projekt använder django.contrib.postgres.fields.JSONField, plus relaterade formulärfält och transformationer, bör du anpassa dig för att använda de nya fälten och generera och tillämpa en databasmigrering. För närvarande finns de gamla fälten och transformationerna kvar som en referens till de nya och är deprecated as of this release.
DEFAULT_HASHING_ALGORITHM inställningar¶
Den nya övergångsinställningen DEFAULT_HASHING_ALGORITHM gör det möjligt att ange standardhashingalgoritmen som ska användas för kodning av cookies, lösenordsåterställningstoken på administratörssidan, användarsessioner och signaturer som skapats av django.core.signing.Signer och django.core.signing.dumps().
Stöd för SHA-256 lades till i Django 3.1. Om du uppgraderar flera instanser av samma projekt till Django 3.1 bör du ställa in DEFAULT_HASHING_ALGORITHM till 'sha1' under övergången, för att möjliggöra kompatibilitet med de äldre versionerna av Django. Observera att detta kräver Django 3.1.1+. När övergången till 3.1 är klar kan du sluta åsidosätta DEFAULT_HASHING_ALGORITHM.
Den här inställningen är inte aktuell från och med den här utgåvan, eftersom stöd för tokens, cookies, sessioner och signaturer som använder SHA-1-algoritmen kommer att tas bort i Django 4.0.
Mindre funktioner¶
django.contrib.admin¶
Den nya
django.contrib.admin.EmptyFieldListFilterförModelAdmin.list_filtertillåter filtrering på tomma värden (tomma strängar och nollor) i admin-ändringslistvyn.Filter i det högra sidofältet i vyn för adminändringslistan innehåller nu en länk för att rensa alla filter.
Administratören har nu ett sidofält på större skärmar för enklare navigering. Det är aktiverat som standard men kan avaktiveras genom att använda en anpassad
AdminSiteoch ställa inAdminSite.enable_nav_sidebartillFalse.Rendering av sidofältet kräver tillgång till den aktuella begäran för att ställa in CSS- och ARIA-rollförmåner. Detta kräver användning av
'django.template.context_processors.request'i alternativet'context_processors'iOPTIONS.Initialt tomma
extrainlines kan nu tas bort, på samma sätt som dynamiskt skapade.XRegExpär uppgraderad från version 2.0.0 till 3.2.0.jQuery uppgraderas från version 3.4.1 till 3.5.1.
Select2-biblioteket har uppgraderats från version 4.0.7 till 4.0.13.
django.contrib.auth¶
Standardantalet iterationer för PBKDF2-lösenordshashen ökas från 180.000 till 216.000.
Den nya inställningen
PASSWORD_RESET_TIMEOUTgör det möjligt att definiera antalet sekunder som en länk för återställning av lösenord är giltig. Detta uppmuntras istället för den föråldrade inställningenPASSWORD_RESET_TIMEOUT_DAYS, som kommer att tas bort i Django 4.0.Mekanismen för återställning av lösenord använder nu hash-algoritmen SHA-256. Stöd för tokens som använder den gamla hash-algoritmen finns kvar till Django 4.0.
AbstractBaseUser.get_session_auth_hash()använder nu SHA-256 hashingalgoritmen. Stöd för användarsessioner som använder den gamla hash-algoritmen finns kvar fram till Django 4.0.
django.contrib.contenttypes¶
Det nya alternativet
remove_stale_contenttypes --include-stale-appsgör det möjligt att ta bort inaktuella innehållstyper från tidigare installerade appar som har tagits bort frånINSTALLED_APPS.
django.contrib.gis¶
relatelookup stöds nu på MariaDB.Lagt till egenskapen
LinearRing.is_counterclockwise.AsGeoJSONstöds nu av Oracle.Stöd för PostGIS 3 och GDAL 3 har lagts till.
django.contrib.humanize¶
intwordmallfilter stöder nu negativa heltal.
django.contrib.postgres¶
Den nya
BloomIndex-klassen gör det möjligt att skapabloom-index i databasen. Den nyaBloomExtension-migreringsoperationen installerarbloom-tillägget för att lägga till stöd för detta index.get_FOO_display()stöder nuArrayFieldochRangeField.De nya uppslagen
rangefield.lower_inc,rangefield.lower_inf,rangefield.upper_incochrangefield.upper_infgör det möjligt att frågaRangeFieldefter en bunden typ.rangefield.contained_bystöder nuSmallAutoField,AutoField,BigAutoField,SmallIntegerFieldochDecimalField.SearchQuerystöder nu söktypen'websearch'på PostgreSQL 11+.SearchQuery.valuehar nu stöd för frågeuttryck.Den nya
SearchHeadline-klassen gör det möjligt att markera sökresultat.searchlookup har nu stöd för frågeuttryck.Den nya parametern
cover_densityiSearchRanktillåter rangordning efter täckningsdensitet.Den nya parametern
normalizationiSearchRanktillåter normalisering av rankning.Det nya attributet
ExclusionConstraint.deferrablegör det möjligt att skapa uppskjutbara uteslutningsbegränsningar.
django.contrib.sessions¶
Inställningen
SESSION_COOKIE_SAMESITEtillåter nu värdet'None'(sträng) för att uttryckligen ange att cookien skickas med alla förfrågningar på samma webbplats och mellan olika webbplatser.
django.contrib.staticfiles¶
Inställningen
STATICFILES_DIRSstöder nupathlib.Path.
Cache¶
Dekoratorn
cache_control()och metodenpatch_cache_control()stöder nu flera fältnamn i direktivetno-cacheför rubrikenCache-Control, enligt RFC 7234 Section 5.2.2.2.delete()returnerar nuTrueom nyckeln har raderats framgångsrikt,Falseannars.
CSRF¶
Inställningen
CSRF_COOKIE_SAMESITEtillåter nu värdet'None'(sträng) för att uttryckligen ange att cookien skickas med alla förfrågningar på samma webbplats och mellan olika webbplatser.
E-postadress¶
Inställningen
EMAIL_FILE_PATH, som används av file email backend, har nu stöd förpathlib.Path.
Felrapportering¶
django.views.debug.SafeExceptionReporterFilterfiltrerar nu känsliga värden frånrequest.METAi undantagsrapporter.De nya attributen
SafeExceptionReporterFilter.cleansed_substituteochSafeExceptionReporterFilter.hidden_settingsgör det möjligt att anpassa känsliga inställningar och filtrering avrequest.METAi undantagsrapporter.Den tekniska 404-felsökningsvyn respekterar nu
DEFAULT_EXCEPTION_REPORTER_FILTERvid tillämpning av inställningsfiltrering.Den nya
DEFAULT_EXCEPTION_REPORTERgör det möjligt att tillhandahålla endjango.views.debug.ExceptionReporter-underklass för att anpassa genereringen av undantagsrapporter. Se Anpassade felrapporter för detaljer.
Fil delning¶
metoden
FileSystemStorage.save()har nu stöd förpathlib.Path.FileFieldochImageFieldaccepterar nu en callable förstorage. Detta gör att du kan ändra den använda lagringen vid körning, till exempel genom att välja olika lagring för olika miljöer.
Formulär¶
ModelChoiceIterator, som används avModelChoiceFieldochModelMultipleChoiceField, använder nuModelChoiceIteratorValuesom kan användas av widgets för att komma åt modellinstanser. Se Iteration av relationsval för detaljer.django.forms.DateTimeFieldaccepterar nu datum i en delmängd av ISO 8601 datetime-format, inklusive valfri tidszon, t.ex.2019-10-10T06:47,2019-10-10T06:47:23+04:00, eller2019-10-10T06:47:23Z. Tidszonen kommer alltid att behållas om den anges, och tidszonmedvetna datatider returneras även omUSE_TZärFalse.Dessutom använder
DateTimeFieldnuDATE_INPUT_FORMATSi tillägg tillDATETIME_INPUT_FORMATSnär fältinmatning konverteras till ettdatetime-värde.MultiWidget.widgetsaccepterar nu en ordbok som gör det möjligt att anpassa attribut för subwidgetsnamn.Den nya egenskapen
BoundField.widget_typekan användas för att dynamiskt justera formulärrendering baserat på widget-typen.
Internationalisering¶
Inställningen
LANGUAGE_COOKIE_SAMESITEtillåter nu värdet'None'(sträng) för att uttryckligen ange att cookien skickas med alla förfrågningar på samma webbplats och mellan olika webbplatser.Stöd för och översättningar av algerisk arabiska, igbo, kirgiziska, tadzjikiska och turkmenska har lagts till.
Kommandon för hantering¶
Det nya alternativet
check --databasegör det möjligt att ange databasalias för att köra systemkontrollernadatabase. Tidigare aktiverades dessa kontroller för alla konfigureradeDATABASERgenom att skicka taggendatabasetill kommandot.Det nya alternativet
migrate --checkgör att kommandot avslutas med en status som inte är noll när oanvända migreringar upptäcks.Det nya argumentet
returncodeförCommandErrorgör det möjligt att anpassa avslutningsstatusen för hanteringskommandon.Det nya alternativet
dbshell -- ARGUMENTSgör det möjligt att skicka extra argument till kommandoradsklienten för databasen.Kommandona
flushochsqlflushinnehåller nu SQL för att återställa sekvenser på SQLite.
Modeller¶
Den nya funktionen
ExtractIsoWeekDayextraherar ISO-8601-veckodagar frånDateFieldochDateTimeField, och den nyaiso_week_daygör det möjligt att söka efter en ISO-8601-veckodag.QuerySet.explain()stöder nu:TREE-format på MySQL 8.0.16+,alternativet
analyzepå MySQL 8.0.18+ och MariaDB.
Lagt till
PositiveBigIntegerFieldsom fungerar ungefär som enPositiveIntegerFieldförutom att den bara tillåter värden under en viss (databasberoende) gräns. Värden från0till9223372036854775807är säkra i alla databaser som stöds av Django.Det nya
RESTRICT-alternativet föron_delete-argumentet förForeignKeyochOneToOneFieldefterliknar beteendet hos SQL-begränsningenON DELETE RESTRICT.CheckConstraint.checkstöder nu booleska uttryck.Metoderna
RelatedManager.add(),create()ochset()accepterar nu anropsbara objekt som värden i argumentetthrough_defaults.Den nya parametern
is_dstiQuerySet.datetimes()bestämmer behandlingen av icke-existerande och tvetydiga datatider.Den nya
Fexpressionbitxor()metoden tillåter bitvis XOR operation.QuerySet.bulk_create()ställer nu in primärnyckeln på objekt när MariaDB 10.5+ används.Metoden
DatabaseOperations.sql_flush()genererar nu mer effektiv SQL på MySQL genom att användaDELETEistället förTRUNCATE-satser för tabeller som inte kräver återställning av sekvenser.SQLite functions are now marked as
deterministicon Python 3.8+. This allows using them in check constraints and partial indexes.Det nya attributet
UniqueConstraint.deferrablegör det möjligt att skapa uppskjutbara unika begränsningar.
Sidindelning¶
Paginatorkan nu itereras över för att få fram dess sidor.
Förfrågningar och svar¶
Om
ALLOWED_HOSTSär tom ochDEBUG=True, tillåts nu subdomäner av localhost iHost-huvudet, t.ex.static.localhost.HttpResponse.set_cookie()ochHttpResponse.set_signed_cookie()tillåter nu användning avsamesite='None'(sträng) för att uttryckligen ange att cookien skickas med alla förfrågningar på samma webbplats och mellan olika webbplatser.Den nya
HttpRequest.accepts()-metoden returnerar om begäran accepterar den angivna MIME-typen enligt HTTP-headernAccept.
Säkerhet¶
Inställningen
SECURE_REFERRER_POLICYhar nu standardvärdet'same-origin'. Med detta konfigurerat ställerSecurityMiddlewarein Policy för hänvisare-huvudet tillsame-originpå alla svar som inte redan har det. Detta förhindrar att rubrikenRefererskickas till andra ursprung. Om du behöver det tidigare beteendet, sätt uttryckligenSECURE_REFERRER_POLICYtillNone.Standardalgoritmen för
django.core.signing.Signer,django.core.signing.loads(), ochdjango.core.signing.dumps()ändras till SHA-256. Stöd för signaturer gjorda med den gamla SHA-1-algoritmen finns kvar fram till Django 4.0.Den nya parametern
algoritmiSignergör det också möjligt att anpassa hashingalgoritmen.
Mallar¶
De omdöpta
translateochblocktranslatemalltaggarna introduceras för internationalisering i mallkoden. De äldre malltaggarnas aliastransochblocktransfortsätter att fungera och kommer att behållas under överskådlig framtid.Malltaggen
includeaccepterar nu iterabler av mallnamn.
Tester¶
SimpleTestCaseimplementerar nu metodendebug()som gör det möjligt att köra ett test utan att samla in resultatet och fånga upp undantag. Detta kan användas för att stödja körning av tester under en debugger.Den nya inställningen
MIGRATEför testdatabaser gör det möjligt att inaktivera migreringar under skapandet av en testdatabas.DiscoverRunnerkan nu kassera utdata för godkända tester med hjälp avtest --buffer.DiscoverRunnerhoppar nu över att köra systemkontrollerna på databaser som inte refereras av tester.TransactionTestCaseteardown är nu snabbare på MySQL på grund av förbättringar av kommandotflush. Som en bieffekt återställer det senare inte automatiskt sekvenser vid nedmontering längre. AktiveraTransactionTestCase.reset_sequencesom dina tester kräver den här funktionen.
URL:er¶
Path converters kan nu skapa
ValueErrorito_url()för att indikera att det inte finns någon matchning när URL:er vänds.
Verktyg¶
filepath_to_uri()stöder nupathlib.Path.parse_duration()stöder nu kommaseparatorer för decimalfraktioner i ISO 8601-formatet.parse_datetime(),parse_duration()ochparse_time()stöder nu kommaseparatorer för millisekunder.
Diverse¶
SQLite-backend har nu stöd för
pathlib.Pathför inställningenNAME.settings.pysom genereras av kommandotstartprojectanvänder nupathlib.Pathistället föros.pathför att bygga filsystemssökvägar.Inställningen
TIME_ZONEär nu tillåten för databaser som stöder tidszoner.
Bakåtkompatibla ändringar i 3.1¶
Databas backend API¶
I det här avsnittet beskrivs ändringar som kan behövas i tredjeparts databasbackends.
DatabaseOperations.fetch_returned_insert_columns()kräver nu ett ytterligarereturning_paramsargument.egenskapen
connection.timezoneär nu'UTC'som standard, ellerTIME_ZONEnärUSE_TZärTruepå databaser som stöder tidszoner. Tidigare var detNonepå databaser som stödjer tidszoner.egenskapen
connection._nodb_connectionändras till metodenconnection._nodb_cursor()och returnerar nu en kontexthanterare som ger en markör och automatiskt stänger markören och anslutningen närwith-satsen avslutas.DatabaseClient.runshell()kräver nu ett ytterligareparametersargument som en lista med extra argument att skicka vidare till kommandoradsklienten.Det positionella argumentet
sequencesiDatabaseOperations.sql_flush()ersätts av det booleska nyckelordsbara argumentetreset_sequences. OmTrue, kommer sekvenserna för de avkortade tabellerna att återställas.Argumentet
allow_cascadeiDatabaseOperations.sql_flush()är nu ett argument som endast innehåller nyckelord.Det positionella argumentet
usingiDatabaseOperations.execute_sql_flush()har tagits bort. Metoden använder nu databasen i den anropade instansen.Tredjeparts databasbackends måste implementera stöd för
JSONFieldeller sättaDatabaseFeatures.supports_json_fieldtillFalse. Om lagring av primitiver inte stöds, sättDatabaseFeatures.supports_primitives_in_json_fieldtillFalse. Om det finns en sann datatyp för JSON, sättDatabaseFeatures.has_native_json_fieldtillTrue. Omjsonfield.containsochjsonfield.contained_byinte stöds, sättDatabaseFeatures.supports_json_field_containstillFalse.Tredjeparts databasbackends måste implementera introspektion för
JSONFieldeller sättacan_introspect_json_fieldtillFalse.
Borttaget stöd för MariaDB 10.1¶
Uppströmsstöd för MariaDB 10.1 upphör i oktober 2020. Django 3.1 stöder MariaDB 10.2 och senare.
stöd för webbläsaren contrib.admin¶
Administratören stöder inte längre den äldre webbläsaren Internet Explorer. Se admin FAQ för information om webbläsare som stöds.
AbstractUser.first_name <django.contrib.auth.models.User.first_name>` max_length ökad till 150¶
En migrering för django.contrib.auth.models.User.first_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 förnamn kan du använda ett anpassat formulär:
from django import forms
from django.contrib.auth.forms import UserChangeForm
class MyUserChangeForm(UserChangeForm):
first_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)
Diverse¶
Cache-nycklarna som används av
cacheoch genereras avmake_template_fragment_key()skiljer sig från de nycklar som genereras av äldre versioner av Django. Efter uppgradering till Django 3.1 kommer den första begäran till ett tidigare cachat mallfragment att vara en cachemiss.Logiken bakom beslutet att returnera ett omdirigeringsfallback eller ett 204 HTTP-svar från vyn
set_language()baseras nu på HTTP-rubrikenAcceptistället för närvaron av HTTP-rubrikenX-Requested-With.Kompatibilitetsimporten av
django.core.exceptions.EmptyResultSetidjango.db.models.query,django.db.models.sqlochdjango.db.models.sql.datastructurestas bort.Kompatibilitetsimporten av
django.core.exceptions.FieldDoesNotExistidjango.db.models.fieldshar tagits bort.Kompatibilitetsimporten av
django.forms.utils.pretty_name()ochdjango.forms.boundfield.BoundFieldidjango.forms.formstas bort.Kompatibilitetsimporten av
Context,ContextPopExceptionochRequestContextidjango.template.basetas bort.Kompatibilitetsimporten av
django.contrib.admin.helpers.ACTION_CHECKBOX_NAMEidjango.contrib.adminhar tagits bort.Inställningarna
STATIC_URLochMEDIA_URLsom är inställda på relativa sökvägar inleds nu med det servertillhandahållna värdet förSCRIPT_NAME(eller/om det inte är inställt). Denna ändring bör inte påverka inställningar som anges till giltiga webbadresser eller absoluta sökvägar.ConditionalGetMiddlewarelägger inte längre tillETag-headern till svar med en tomcontent.django.utils.decorators.classproperty()decorator is made public and moved todjango.utils.functional.classproperty.floatformatmallfilter ger nu ut (positiv)0för negativa tal som avrundas till noll.Meta.orderingochMeta.unique_togetheralternativ på modeller idjango.contribmoduler som tidigare var tuples är nu listor.Admin-kalenderwidgeten hanterar nu tvåsiffriga årtal enligt Open Group Specification, dvs. värden mellan 69 och 99 mappas till föregående århundrade och värden mellan 0 och 68 mappas till innevarande århundrade.
Format som endast innehåller datum tas bort från standardlistan för
DATETIME_INPUT_FORMATS.Widgeten
FileInputrenderar inte längre med HTML-attributetrequirednär initialdata finns.Den odokumenterade klassen
django.views.debug.ExceptionReporterFilterhar tagits bort. Enligt dokumentationen för Anpassade felrapporter måste klasser som ska användas medDEFAULT_EXCEPTION_REPORTER_FILTERärva fråndjango.views.debug.SafeExceptionReporterFilter.Cache-timeouten som anges av
cache_page()-dekoratorn har nu företräde framförmax-age-direktivet frånCache-Control-rubriken.Att tillhandahålla ett icke-lokalt fjärrfält i argumentet
ForeignKey.to_fieldger nu upphov tillFieldError.SECURE_REFERRER_POLICYhar nu standardvärdet'same-origin'. Se Vad är nytt Security-avsnittet ovan för mer information.ledningskommandot
checkkör nu systemkontrollernadatabasendast för databasalias som anges med alternativetcheck --database.migratekör nu kommandotdatabasesystemkontroller endast för en databas som ska migreras.Admin CSS-klasserna
row1ochrow2är borttagna till förmån för pseudoklasserna:nth-child(odd)och:nth-child(even).Funktionen
make_password()kräver nu att dess argument är en sträng eller bytes. Andra typer bör uttryckligen kastas till en av dessa.Den odokumenterade parametern
versiontill funktionenAsKMLhar tagits bort.JSON- och YAML-serialisatorer, som används av
dumpdata, dumpar nu all data med Unicode som standard. Om du behöver det tidigare beteendet, skickaensure_ascii=Truetill JSON-serialisatorn, ellerallow_unicode=Falsetill YAML-serialisatorn.Den automatiska omladdaren övervakar inte längre ändringar i inbyggda Django-översättningsfiler.
Den minsta versionen av
mysqlclientsom stöds har ökats från 1.3.13 till 1.4.0.De odokumenterade
django.contrib.postgres.forms.InvalidJSONInputochdjango.contrib.postgres.forms.JSONStringflyttas tilldjango.forms.fields.Den odokumenterade klassen
django.contrib.postgres.fields.jsonb.JsonAdaptertas bort.Taggen
{% localize off %}och filtretunlocalizerespekterar inte längre inställningenDECIMAL_SEPARATOR.Den lägsta versionen av
asgirefsom stöds har ökats från 3.2 till 3.2.10.Klassen Media återger nu
<script>-taggar utan attributettypeför att följa WHATWG:s rekommendationer.ModelChoiceIterator, som används avModelChoiceFieldochModelMultipleChoiceField, ger nu 2-tupelval som innehållerModelChoiceIteratorValue-instanser som det förstavalue-elementet i varje val. I de flesta fall är detta en transparent proxy, men om du behöver självafield-värdet använder du istället attributetModelChoiceIteratorValue.value.
Funktioner som inte längre är aktuella i 3.1¶
PostgreSQL JSONField¶
django.contrib.postgres.fields.JSONField och django.contrib.postgres.forms.JSONField är föråldrade till förmån för models.JSONField och forms.JSONField.
De odokumenterade django.contrib.postgres.fields.jsonb.KeyTransform och django.contrib.postgres.fields.jsonb.KeyTextTransform är också föråldrade till förmån för transformationerna i django.db.models.fields.json.
De nya JSONField, KeyTransform och KeyTextTransform kan användas på alla stödda databasbackends.
Diverse¶
inställningen
PASSWORD_RESET_TIMEOUT_DAYSär utfasad till förmån förPASSWORD_RESET_TIMEOUT.Den odokumenterade användningen av
isnulllookup med icke-booleska värden som höger sida är avskriven, användTrueellerFalseistället.Den knappt dokumenterade undantagsklassen
django.db.models.query_utils.InvalidQueryär utfasad till förmån förFieldDoesNotExistochFieldError.Ingångspunkten
django-admin.pyär föråldrad till förmån fördjango-admin.Metoden
HttpRequest.is_ajax()är utfasad eftersom den förlitade sig på ett jQuery-specifikt sätt att signalera AJAX-anrop, medan nuvarande användning tenderar att använda JavaScript Fetch API. Beroende på ditt användningsfall kan du antingen skriva din egen AJAX-detekteringsmetod eller använda den nyaHttpRequest.accepts()-metoden om din kod är beroende av klientensAcceptHTTP-header.Om du skriver din egen AJAX-detekteringsmetod kan
request.is_ajax()återges exakt somrequest.headers.get('x-requested-with') == 'XMLHttpRequest'.Att skicka
Nonesom det första argumentet tilldjango.utils.deprecation.MiddlewareMixin.__init__()är föråldrat.Kodningsformatet för cookie-värden som används av
CookieStorageskiljer sig från det format som genereras av äldre versioner av Django. Stöd för det gamla formatet finns kvar fram till Django 4.0.Kodningsformatet för sessioner skiljer sig från det format som genereras av äldre versioner av Django. Stöd för det gamla formatet finns kvar fram till Django 4.0.
Det rent dokumentationsmässiga
providing_args-argumentet förSignalär föråldrat. Om du förlitar dig på detta argument som dokumentation kan du flytta texten till en kodkommentar eller docstring.Att anropa
django.utils.crypto.get_random_string()utan ettlengthargument är föråldrat.Meddelandet
listförModelMultipleChoiceFieldär utfasat till förmån förinvalid_list.Att skicka råa kolumnaliaser till
QuerySet.order_by()är föråldrat. Samma resultat kan uppnås genom att skicka aliaser i enRawSQListället i förväg.Modellfältet
NullBooleanFieldär föråldrat till förmån förBooleanField(null=True, blank=True).django.conf.urls.url()alias avdjango.urls.re_path()är föråldrat.Malltaggarna
{% ifequal %}och{% ifnotequal %}är avförda till förmån för{% if %}.{% if %}täcker alla användningsfall, men om du behöver fortsätta använda dessa taggar kan de extraheras från Django till en modul och inkluderas som en inbyggd tagg i'builtins'alternativ iOPTIONS.DEFAULT_HASHING_ALGORITHMövergångsinställning är föråldrad.
Funktioner borttagna i 3.1¶
Dessa funktioner har nått slutet av sin utfasningscykel och tas bort i Django 3.1.
Se Funktioner som inte längre är aktuella i 2.2 för detaljer om dessa ändringar, inklusive hur man tar bort användningen av dessa funktioner.
django.utils.timezone.FixedOffsettas bort.django.core.paginator.QuerySetPaginatortas bort.En modells
Meta.orderingpåverkar inteGROUP BY-frågor.django.contrib.postgres.fields.FloatRangeFieldochdjango.contrib.postgres.forms.FloatRangeFieldtas bort.Inställningen
FILE_CHARSETtas bort.django.contrib.staticfiles.storage.CachedStaticFilesStoragetas bort.Metoden
RemoteUserBackend.configure_user()kräverrequestsom det första positionella argumentet.Stöd för
SimpleTestCase.allow_database_queriesochTransactionTestCase.multi_dbhar tagits bort.