Django 5.2 release notes¶
2 april 2025
Välkommen till Django 5.2!
Dessa release notes 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 stöder Python 3.10, 3.11, 3.12 och 3.13. Vi rekommenderar starkt och stöder endast officiellt den senaste versionen 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
¶
Före version 5.2 var åsidosättande av Field.get_bound_field()
det enda alternativet för att använda en anpassad BoundField
. Django stöder nu specificering av följande attribut för att anpassa formulärrendering:
BaseRenderer.bound_field_class
på projektnivå,Form.bound_field_class
på formulärnivå, ochField.bound_field_class
på 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 :ref:``lägga till ett async-gränssnitt <writing-authentication-backends-async-interface>` för mer information.Klasserna :ref:
password validator <included-password-validators>
har nu en ny metodget_error_message()
, som kan åsidosättas i underklasser för att anpassa felmeddelandena.
django.contrib.gis
¶
GDAL stöder nu kurvgeometrierna
CurvePolygon
,CompoundCurve
,CircularString
,MultiSurface
ochMultiCurve
via den nya egenskapenOGRGeometry.has_curve
och metodernaOGRGeometry.get_linear_geometry()
ochOGRGeometry.get_curve_geometry()
.
Databas backends¶
MySQL-anslutningar använder nu som standard teckenuppsättningen
utf8mb4
i 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.attachments
ochEmailMultiAlternatives.attachments
heter 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-postmeddelandetsbody
och i alla bifogade MIME-typtext/*
-alternativ.
Felrapportering¶
Attributet
SafeExceptionReporterFilter.hidden_settings
behandlar 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 formatrrggbb
och å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_id
förErrorList
gör att ett HTML-attributid
kan läggas till i felmallen. SeErrorList.field_id
för detaljer.En
aria_describedby
-egenskap läggs till iBoundField
fö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-describedby
för att associera formulärfält med deras felmeddelanden. Se :ref:``hur formulärfel visas <form-error-display>` 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 :ref:``paths as objects <form-media-asset-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_WARNING
till"true"
.Kommandona
makemigrations
ochmigrate
har fått ett nytt attributCommand.autodetector
som 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
SELECT
som 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_returning
anger 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_length
behö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
JSONArray
accepterar en lista med fältnamn eller uttryck och returnerar en JSON-array som innehåller dessa värden.Det nya attributet
Expression.allows_composite_expressions
anger att uttrycket tillåter sammansatta uttryck, t.ex. för att stödja :ref:``sammansatta primärnycklar <cpk-and-database-functions>`.
Förfrågningar och svar¶
Den nya egenskapen
HttpResponse.text
ger 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_request
förHttpResponseRedirect
ochHttpResponsePermanentRedirect
avgör om HTTP-statuskoderna 302/307 respektive 301/308 ska användas.Det nya argumentet
preserve_request
fö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 :ref:anpassat serialiseringsformat <custom-serialization-formats>
.
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 --pdb
att direkt gå in i den misslyckade testmetoden.Data som laddats från
fixtures
och från migreringar som aktiverats med :ref:serialized_rollback=True <test-case-serialized-rollback>` är nu tillgängliga under ``TransactionTestCase.setUpClass()
.
URL:er¶
reverse()
ochreverse_lazy()
accepterar nu nyckelordsargumentenquery
ochfragment
, vilket gör det möjligt att lägga till en frågesträng och/eller fragmentidentifierare i den genererade URL:en.
Verktyg¶
SafeString
returnerar nuNotImplemented
i__add__
för högerhandsvärden som inte är strängar. Detta stämmer överens medstr
additionsbeteende och gör att__radd__
kan användas om det är tillgängligt.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.alternatives
stöds nu endast via metodenattach_alternative()
.Den lägsta versionen av
gettext
som stöds har höjts från 0.15 till 0.19.HttpRequest.accepted_types
sorteras nu efter klientens preferens, baserat på begäranAccept
header.Attributen
UniqueConstraint.violation_error_code
ochUniqueConstraint.violation_error_message
används nu alltid när de anges. Tidigare ignorerades de omUniqueConstraint.fields
angavs utanUniqueConstraint.condition
.Kontextprocessorn
debug()
ingår inte längre i standardmallen för projekt.Följande metoder har nu
alters_data=True
inställt för att förhindra sidoeffekter när rendering av en mallkontext:Den minsta versionen av
oracledb
som 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
,Sum
ochVariance
) ger nu upphov tillTypeError
när de anropas med ett felaktigt antal argument.
Funktioner som inte längre är aktuella i 5.2¶
Diverse¶
Argumentet
all
för funktionendjango.contrib.staticfiles.finders.find()
är utfasat till förmån för argumentetfind_all
.Fallbacks to
request.user
andrequest.auser()
whenuser
isNone
indjango.contrib.auth.login()
anddjango.contrib.auth.alogin()
, respectively, are deprecated.Nyckelordsargumentet
ordering
för de PostgreSQL-specifika aggregeringsfunktionernadjango.contrib.postgres.aggregates.ArrayAgg
,django.contrib.postgres.aggregates.JSONBAgg
ochdjango.contrib.postgres.aggregates.StringAgg
är avskrivet till förmån förorder_by
-argumentet.Stöd för subklasser av
RemoteUserMiddleware
som åsidosätterprocess_request()
utan att åsidosättaaprocess_request()
är föråldrat.