• dev
  • Version de la documentation : 2.2

Référence des contraintes

New in Django 2.2:

Les classes définies dans ce module créent des contraintes de base de données. Elles sont ajoutées dans l’option Meta.constraints des modèles.

Référencement des contraintes intégrées

Les contraintes sont définies dans django.db.models.constraints, mais par commodité elles sont importées dans django.db.models. La convention standard est d’utiliser from django.db import models et de se référer aux contraintes avec models.<Telle>Constraint.

Contraintes dans les classes de base abstraites

Les contraintes doivent toujours être nommées de façon unique. Cela signifie qu’il n’est pas possible de définir des contraintes dans une classe de base abstraite, dans la mesure où l’option Meta.constraints est héritée par les sous-classes avec exactement les mêmes valeurs d’attributs (y compris name). Il faut dès lors définir l’option constraints directement sur les sous-classes, ce qui permet d’indiquer un nom unique pour chaque contrainte.

Validation des contraintes

In general constraints are not checked during full_clean(), and do not raise ValidationErrors. Rather you’ll get a database integrity error on save(). UniqueConstraints without a condition (i.e. non-partial unique constraints) are different in this regard, in that they leverage the existing validate_unique() logic, and thus enable two-stage validation. In addition to IntegrityError on save(), ValidationError is also raised during model validation when the UniqueConstraint is violated.

CheckConstraint

class CheckConstraint(*, check, name)[source]

Crée une contrainte de vérification dans la base de données.

check

CheckConstraint.check

Un objet Q qui indique le contrôle que la contrainte souhaitée doit appliquer.

Par exemple, CheckConstraint(check=Q(age__gte=18), name='age_gte_18') s’assure que le champ age n’est jamais au-dessous de 18.

name

CheckConstraint.name

Le nom de la contrainte.

UniqueConstraint

class UniqueConstraint(*, fields, name, condition=None)[source]

Crée une contrainte d’unicité dans la base de données.

fields

UniqueConstraint.fields

Une liste de noms de champs qui précise l’ensemble unique de colonnes pour lesquelles la contrainte va assurer l’unicité.

Par exemple, UniqueConstraint(fields=['chambre', 'date'], name='reservation_unique') s’assure que chaque chambre ne peut être réservée qu’une seule fois par date.

name

UniqueConstraint.name

Le nom de la contrainte.

condition

UniqueConstraint.condition

Un objet Q qui indique la condition que la contrainte souhaitée doit appliquer.

Par exemple :

UniqueConstraint(fields=['user'], condition=Q(status='DRAFT'), name='unique_draft_user')

s’assure que chaque utilisateur dispose d’un seul brouillon.

Ces conditions sont soumises aux même restrictions de base de données que Index.condition.

Back to Top