Se rendre au contenu

Django 5.0 est sorti

4 décembre 2023 par
Django 5.0 est sorti
Makersquad

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.



Django REST Framework 3.15 est sorti