Référence des contraintesLien vers cette rubrique

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.

BaseConstraintLien vers cette rubrique

class BaseConstraint(name, violation_error_message=None)Lien vers cette définition

Classe de base pour toutes les contraintes. Les sous-classes doivent implémenter les méthodes constraint_sql(), create_sql(), remove_sql() et validate().

Toutes les contraintes partagent les paramètres suivants :

nameLien vers cette rubrique

BaseConstraint.nameLien vers cette définition

Le nom de la contrainte. La contrainte doit toujours posséder un nom unique.

violation_error_messageLien vers cette rubrique

BaseConstraint.violation_error_messageLien vers cette définition

The error message used when ValidationError is raised during model validation. Defaults to "Constraint “%(name)s” is violated.".

validate()Lien vers cette rubrique

BaseConstraint.validate(model, instance, exclude=None, using=DEFAULT_DB_ALIAS)Lien vers cette définition

Validates that the constraint, defined on model, is respected on the instance. This will do a query on the database to ensure that the constraint is respected. If fields in the exclude list are needed to validate the constraint, the constraint is ignored.

Raise a ValidationError if the constraint is violated.

This method must be implemented by a subclass.

CheckConstraintLien vers cette rubrique

class CheckConstraint(*, check, name, violation_error_message=None)Lien vers cette définition

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

checkLien vers cette rubrique

CheckConstraint.checkLien vers cette définition

Un objet Q ou une Expression booléenne 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.

UniqueConstraintLien vers cette rubrique

class UniqueConstraint(*expressions, fields=(), name=None, condition=None, deferrable=None, include=None, opclasses=(), violation_error_message=None)Lien vers cette définition

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

expressionsLien vers cette rubrique

UniqueConstraint.expressionsLien vers cette définition

L’argument positionnel *expressions permet de créer des contraintes d’unicité fonctionnelles sur des expressions et des fonctions de base de données.

Par exemple :

Code
UniqueConstraint(Lower('name').desc(), 'category', name='unique_lower_name_category')

crée une contrainte d’unicité sur la valeur en minuscules du champ name dans l’ordre alphabétique inverse et le champ category dans l’ordre alphabétique par défaut.

Les contraintes d’unicité basées sur des fonctions sont soumises aux même restrictions de base de données que Index.expressions.

fieldsLien vers cette rubrique

UniqueConstraint.fieldsLien vers cette définition

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.

conditionLien vers cette rubrique

UniqueConstraint.conditionLien vers cette définition

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

Par exemple :

Code
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.

deferrableLien vers cette rubrique

UniqueConstraint.deferrableLien vers cette définition

Définissez ce paramètre pour créer une contrainte d’unicité différable. Les valeurs acceptées sont Deferrable.DEFERRED ou Deferrable.IMMEDIATE. Par exemple

Code
from django.db.models import Deferrable, UniqueConstraint

UniqueConstraint(
    name='unique_order',
    fields=['order'],
    deferrable=Deferrable.DEFERRED,
)

Par défaut, les contraintes ne sont pas différées. Une contrainte différée ne sera pas appliquée avant la fin de la transaction. Une contrainte immédiate sera appliquée immédiatement après chaque commande.

includeLien vers cette rubrique

UniqueConstraint.includeLien vers cette définition

Une liste ou un tuple de noms de champs à inclure dans l’index unique couvrant, représentant des colonnes qui ne sont pas des clés. Cela permet des analyses en index pur avec des requêtes qui ne sélectionnent que les champs inclus (include) et qui ne filtrent que sur les champs indexés (fields).

Par exemple :

Code
UniqueConstraint(name='unique_booking', fields=['room', 'date'], include=['full_name'])

permettra le filtrage sur room et date, sélectionnant aussi full_name, tout en ne récupérant les données qu’à partir de l’index.

include n’est pris en charge que par PostgreSQL.

Les colonnes qui ne sont pas des clés sont soumises aux même restrictions de base de données que pour Index.include.

opclassesLien vers cette rubrique

UniqueConstraint.opclassesLien vers cette définition

Les noms des classes d’opérateurs PostgreSQL à utiliser pour cet index unique. Si vous nécessitez une classe d’opérateur personnalisée, vous devez en fournir une pour chaque champ de l’index.

Par exemple :

Code
UniqueConstraint(name='unique_username', fields=['username'], opclasses=['varchar_pattern_ops'])

crée un index unique sur username en utilisant varchar_pattern_ops.

opclasses est ignoré pour les bases de données autres que PostgreSQL.

violation_error_messageLien vers cette rubrique

UniqueConstraint.violation_error_messageLien vers cette définition

The error message used when ValidationError is raised during model validation. Defaults to BaseConstraint.violation_error_message.

This message is not used for UniqueConstraints with fields and without a condition. Such UniqueConstraints show the same message as constraints defined with Field.unique or in Meta.unique_together.