Date de sortie : 4 décembre 2023
Documentation officielle : Django 5.0 release notes
Django 5.0 apporte des features qu’on demandait depuis longtemps. GeneratedField pour les colonnes calculées côté base, db_default pour des valeurs par défaut SQL, et les choices qui acceptent enfin les enums directement. C’est du solide.
Les nouveautés principales
GeneratedField — colonnes calculées côté base
Fini les @property pour les calculs simples. La base fait le travail :
from django.db.models import F, GeneratedField
class Rectangle(models.Model):
width = models.IntegerField()
height = models.IntegerField()
area = GeneratedField(
expression=F('width') * F('height'),
output_field=models.IntegerField(),
db_persist=True # Stocké vs calculé à la volée
)
La valeur est calculée automatiquement par la base, pas par Python.
db_default — valeurs par défaut côté base
Définir des valeurs par défaut au niveau SQL :
from django.db.models.functions import Now
class Article(models.Model):
created_at = models.DateTimeField(db_default=Now())
view_count = models.IntegerField(db_default=0)
Contrairement à default, la valeur est définie par la base, même pour les insertions directes.
Facettes dans l’admin
L’admin peut afficher le nombre de résultats par filtre :
class ArticleAdmin(admin.ModelAdmin):
list_filter = ['status', 'category']
show_facets = admin.ShowFacets.ALWAYS # ou ALLOW, NEVER
Choices simplifiés
Plus besoin de .choices sur les enums :
class Status(models.TextChoices):
DRAFT = 'draft', 'Brouillon'
PUBLISHED = 'published', 'Publié'
class Article(models.Model):
status = models.CharField(choices=Status) # Plus de .choices !
Les dictionnaires sont aussi acceptés :
SPORT_CHOICES = {
'Arts martiaux': {'judo': 'Judo', 'karate': 'Karaté'},
'Raquette': {'tennis': 'Tennis', 'badminton': 'Badminton'},
}
as_field_group() pour les formulaires
Rendu simplifié d’un champ avec label, erreurs et help text :
{{ form.email.label_tag }}
{{ form.email.errors }}
{{ form.email }}
{% if form.email.help_text %}
<small>{{ form.email.help_text }}</small>
{% endif %}
{{ form.email.as_field_group }}
Autres améliorations
- Python 3.10+ requis
- Fonctions async pour l’auth : alogin(), alogout(), aauthenticate()
- aget_object_or_404(), aget_list_or_404()
- Décorateurs supportent les vues async
Échanger avec un expert Django
Nous revenons vers vous sous 24h.
Chez Makersquad, nous accompagnons nos clients dans la conception d’application modernes et performantes avec Django .Que vous souhaitiez lancer une nouvelle API, moderniser une architecture existante ou améliorer les performances de vos services backend, notre équipe met son expertise à votre disposition pour concevoir des solutions fiables, rapides et parfaitement adaptées à vos enjeux métier.
À retenir
Django 5.0 délègue plus de travail à la base de données, là où c’est plus efficace. GeneratedField et db_default sont des additions majeures pour ceux qui veulent des schémas propres et des garanties au niveau SQL.
