Django 5.2 versionsinformation¶
2 april 2025
Välkommen till Django 5.2!
Dessa versionsinformation täcker nya funktioner, samt några bakåtkompatibla ändringar som du bör vara medveten om när du uppgraderar från Django 5.1 eller tidigare. Vi har börjat utfasningsprocessen för vissa funktioner.
Se guiden Så här uppgraderar du Django till en nyare version om du ska uppdatera ett befintligt projekt.
Django 5.2 betecknas som en long-term support release. Den kommer att få säkerhetsuppdateringar i minst tre år efter att den släppts. Stöd för den tidigare LTS, Django 4.2, kommer att upphöra i april 2026.
Kompatibilitet med Python¶
Django 5.2 har stöd för Python 3.10, 3.11, 3.12, 3.13 och 3.14 (från och med 5.2.8). Vi rekommenderar starkt och stöder endast officiellt den senaste utgåvan av varje serie.
Vad är nytt i Django 5.2¶
Automatisk import av modeller i shell¶
Hanteringskommandot shell importerar nu automatiskt modeller från alla installerade appar. Du kan visa ytterligare detaljer om de importerade objekten genom att ställa in flaggan --verbosity till 2 eller mer:
$ python -Wall manage.py shell --verbosity=2
6 objects imported automatically, including:
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
...\> py -Wall manage.py shell --verbosity=2
6 objects imported automatically, including:
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
Detta beteende kan anpassas för att lägga till eller ta bort automatisk import.
Sammansatta primära nycklar¶
Den nya django.db.models.CompositePrimaryKey gör det möjligt att skapa tabeller med en primärnyckel som består av flera fält.
För att använda en sammansatt primärnyckel måste du när du definierar en modell ange att attributet pk ska vara en CompositePrimaryKey:
from django.db import models
class Release(models.Model):
pk = models.CompositePrimaryKey("version", "name")
version = models.IntegerField()
name = models.CharField(max_length=20)
Se Sammansatta primärnycklar för mer information.
Förenklad åsidosättning av BoundField¶
Prior to version 5.2, overriding Field.get_bound_field() was the only
option to use a custom BoundField. Django now supports
specifying the following attributes to customize form rendering:
BaseRenderer.bound_field_classpå projektnivå,Form.bound_field_classpå formulärnivå, ochField.bound_field_classpå fältnivå.
Till exempel, för att anpassa BoundField i en Form klass:
from django import forms
class CustomBoundField(forms.BoundField):
custom_class = "custom"
def css_classes(self, extra_classes=None):
result = super().css_classes(extra_classes)
if self.custom_class not in result:
result += f" {self.custom_class}"
return result.strip()
class CustomForm(forms.Form):
bound_field_class = CustomBoundField
name = forms.CharField(
label="Your Name",
max_length=100,
required=False,
widget=forms.TextInput(attrs={"class": "name-input-class"}),
)
email = forms.EmailField(label="Your Email")
Vid rendering av en CustomForm-instans inkluderas följande HTML:
<div class="custom">
<label for="id_name">Your Name:</label>
<input type="text" name="name" class="name-input-class" maxlength="100" id="id_name">
</div>
<div class="custom">
<label for="id_email">Your Email:</label>
<input type="email" name="email" maxlength="320" required="" id="id_email">
</div>
Se Anpassa BoundField för mer information om denna funktion.
Mindre funktioner¶
django.contrib.admin¶
django.contrib.admindocs¶
Länkar till komponenter i dokumentationssträngar stöder nu anpassad länktext, med formatet
:role:`link text <link>. Se dokumentationshjälpmedel för mer information.modellsidor är nu begränsade till användare med motsvarande visnings- eller ändringsbehörighet.
django.contrib.auth¶
Standardantalet iterationer för PBKDF2-lösenordshashen ökas från 870.000 till 1.000.000.
Följande nya asynkrona metoder tillhandahålls nu, med prefixet
a:Auth-backends kan nu tillhandahålla asynkrona implementationer som används när man anropar asynkrona auth-funktioner (t.ex.
aauthenticate()) för att minska kontextväxling vilket förbättrar prestanda. Se lägga till ett async-gränssnitt för mer information.Klasserna password validator har nu en ny metod
get_error_message(), som kan åsidosättas i underklasser för att anpassa felmeddelandena.
django.contrib.gis¶
GDAL stöder nu kurvgeometrierna
CurvePolygon,CompoundCurve,CircularString,MultiSurfaceochMultiCurvevia den nya egenskapenOGRGeometry.has_curveoch metodernaOGRGeometry.get_linear_geometry()ochOGRGeometry.get_curve_geometry().
Databas backends¶
MySQL-anslutningar använder nu som standard teckenuppsättningen
utf8mb4i stället förutf8, som är ett alias för den föråldrade teckenuppsättningenutf8mb3.Oracle backends stöder nu connection pools, genom att ställa in
"pool"iOPTIONS-delen av din databaskonfiguration.
Dekoratörer¶
method_decorator()stöder nu omslag för asynkrona vymetoder.
E-postadress¶
Tupelobjekt i
EmailMessage.attachmentsochEmailMultiAlternatives.attachmentsheter nu tuplar, i motsats till vanliga tuplar.EmailMultiAlternatives.alternativesär nu en lista med namngivna tupler, i motsats till vanliga tupler.Den nya metoden
body_contains()returnerar en boolean som anger om en angiven text ingår i e-postmeddelandetsbodyoch i alla bifogade MIME-typtext/*-alternativ.
Felrapportering¶
Attributet
SafeExceptionReporterFilter.hidden_settingsbehandlar nu värden som känsliga om deras namn innehållerAUTH.
Formulär¶
Den nya formulärwidgeten
ColorInputär till för att ange en färg i hexadecimalt formatrrggbboch återges som<input type="color" ...>. Vissa webbläsare stöder ett visuellt färgväljargränssnitt för den här inmatningstypen.Den nya
SearchInput-form widgeten är till för att skriva in sökfrågor och återges som<input type="search" ...>.Den nya formulärwidgeten
TelInputär avsedd för inmatning av telefonnummer och återges som<input type="tel" ...>.Det nya argumentet
field_idförErrorListgör att ett HTML-attributidkan läggas till i felmallen. SeErrorList.field_idför detaljer.En
aria_describedby-egenskap läggs till iBoundFieldför att underlätta användningen av detta HTML-attribut i mallar.För att förbättra tillgängligheten för skärmläsaranvändare används
aria-describedbyför att associera formulärfält med deras felmeddelanden. Se hur formulärfel visas för mer information.Det nya tillgångsobjektet
Scriptär tillgängligt för att lägga till anpassade HTML-attribut till JavaScript i formulärmedia. Se paths as objects för mer information.
Kommandon för hantering¶
En ny varning visas när du kör
runserver, vilket indikerar att den är olämplig för produktion. Denna varning kan undertryckas genom att ställa in miljövariabelnDJANGO_RUNSERVER_HIDE_WARNINGtill"true".Kommandona
makemigrationsochmigratehar fått ett nytt attributCommand.autodetectorsom underklasser kan åsidosätta för att använda en anpassad autodetektorklass.Den nya metoden
BaseCommand.get_check_kwargs()kan åsidosättas i anpassade kommandon för att styra körningen av systemkontroller, t.ex. för att välja databasberoende kontroller.
Migreringar¶
Den nya operationen
AlterConstraintär en no-op-operation som ändrar begränsningar utan att ta bort och återskapa begränsningar i databasen.
Modeller¶
Klausulen
SELECTsom genereras när man använderQuerySet.values()ochQuerySet.values_list()matchar nu den angivna ordningen på de refererade uttrycken. Tidigare baserades ordningen på en uppsättning kontraintuitiva regler som gjorde det oförutsägbart att kombinera frågor med hjälp av metoder somQuerySet.union().Lagt till stöd för validering av modellbegränsningar som använder en
GeneratedField.Det nya attributet
Expression.set_returninganger att uttrycket innehåller en set-returning-funktion, vilket tvingar fram utvärdering av underfrågor. Detta är nödvändigt för många av Postgres set-returning-funktioner.CharField.max_lengthbehöver inte längre anges i SQLite, som stöder obegränsadeVARCHAR-kolumner.QuerySet.explain()stöder nu alternativen `` minne`` och `` serialize`` på PostgreSQL 17+.Den nya databasfunktionen
JSONArrayaccepterar en lista med fältnamn eller uttryck och returnerar en JSON-array som innehåller dessa värden.Det nya attributet
Expression.allows_composite_expressionsanger att uttrycket tillåter sammansatta uttryck, t.ex. för att stödja sammansatta primärnycklar.
Förfrågningar och svar¶
Den nya egenskapen
HttpResponse.textger en strängrepresentation avHttpResponse.content.Den nya metoden
HttpRequest.get_preferred_type()kan användas för att fråga efter den föredragna mediatyp som klienten accepterar.Det nya argumentet
preserve_requestförHttpResponseRedirectochHttpResponsePermanentRedirectavgör om HTTP-statuskoderna 302/307 respektive 301/308 ska användas.Det nya argumentet
preserve_requestförredirect()gör det möjligt att instruera användaragenten att återanvända HTTP-metoden och -kroppen under omdirigering med specifika statuskoder.
Serialisering¶
Varje serialiseringsformat definierar nu en
Deserializer-klass, snarare än en funktion, för att förbättra utbyggbarheten när man definierar ett anpassat serialiseringsformat.
Mallar¶
Den nya
simple_block_tag()-dekoratorn gör det möjligt att skapa enkla block-taggar, som kan acceptera och använda ett avsnitt av mallen.
Tester¶
Stack frames från Djangos anpassade assertions är nu dolda. Detta gör testfel lättare att läsa och gör det möjligt för
test --pdbatt direkt gå in i den misslyckade testmetoden.Data som laddats från
fixturesoch från migreringar som aktiverats med serialized_rollback=True är nu tillgängliga underTransactionTestCase.setUpClass().
URL:er¶
reverse()ochreverse_lazy()accepterar nu nyckelordsargumentenqueryochfragment, vilket gör det möjligt att lägga till en frågesträng och/eller fragmentidentifierare i den genererade URL:en.
Verktyg¶
SafeStringnow returnsNotImplementedin__add__for non-string right-hand side values. This aligns with thestraddition behavior and allows__radd__to be used if available.format_html_join()stöder nu att ta en iterabel av mappningar och skicka deras innehåll som nyckelordsargument tillformat_html().
Bakåtkompatibla ändringar i 5.2¶
Databas backend API¶
I det här avsnittet beskrivs ändringar som kan behövas i tredjeparts databasbackends.
Den nya metoden
Model._is_pk_set()gör det möjligt att kontrollera om en modellinstans primärnyckel är definierad.BaseDatabaseOperations.adapt_decimalfield_value()är nu ett no-op, som bara returnerar det angivna värdet.
django.contrib.gis¶
Stöd för PostGIS 3.0 har tagits bort.
Stöd för GDAL 3.0 har tagits bort.
Slopat stöd för PostgreSQL 13¶
Uppströmsstöd för PostgreSQL 13 slutar i november 2025. Django 5.2 stöder PostgreSQL 14 och högre.
Ändrad standard för teckenuppsättning för MySQL-anslutning¶
MySQL-anslutningar använder nu som standard teckenuppsättningen utf8mb4 istället för utf8, som är ett alias för den föråldrade teckenuppsättningen utf8mb3. utf8mb3 kan anges i OPTIONS-delen av inställningen DATABASES, om det behövs för äldre databaser.
Diverse¶
Att lägga till
EmailMultiAlternatives.alternativesstöds nu endast via metodenattach_alternative().Den lägsta versionen av
gettextsom stöds har höjts från 0.15 till 0.19.HttpRequest.accepted_typessorteras nu efter klientens preferens, baserat på begäranAcceptheader.Attributen
UniqueConstraint.violation_error_codeochUniqueConstraint.violation_error_messageanvänds nu alltid när de anges. Tidigare ignorerades de omUniqueConstraint.fieldsangavs utanUniqueConstraint.condition.Kontextprocessorn
debug()ingår inte längre i standardmallen för projekt.Följande metoder har nu
alters_data=Trueinställt för att förhindra sidoeffekter när rendering av en mallkontext:Den minsta versionen av
oracledbsom stöds har ökats från 1.3.2 till 2.3.0.Inbyggda aggregatfunktioner som bara accepterar ett argument (
Avg,Count,Max,Min,StdDev,SumochVariance) ger nu upphov tillTypeErrornär de anropas med ett felaktigt antal argument.
Funktioner som inte längre är aktuella i 5.2¶
Diverse¶
Argumentet
allför funktionendjango.contrib.staticfiles.finders.find()är utfasat till förmån för argumentetfind_all.Fallbacks till
request.userochrequest.auser()näruserärNoneidjango.contrib.auth.login()respektivedjango.contrib.auth.alogin()är föråldrade.Nyckelordsargumentet
orderingför de PostgreSQL-specifika aggregeringsfunktionernadjango.contrib.postgres.aggregates.ArrayAgg,django.contrib.postgres.aggregates.JSONBAggochdjango.contrib.postgres.aggregates.StringAggär avskrivet till förmån förorder_by-argumentet.Stöd för subklasser av
RemoteUserMiddlewaresom åsidosätterprocess_request()utan att åsidosättaaprocess_request()är föråldrat.