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_code=None, 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()etvalidate().
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_codeLien vers cette rubrique
- BaseConstraint.violation_error_codeLien vers cette définition
Le code d’erreur utilisé lorsque ValidationError est générée pendant la phase de validation des modèles. Contient None par défaut.
violation_error_messageLien vers cette rubrique
- BaseConstraint.violation_error_messageLien vers cette définition
Le message d’erreur utilisé lorsque ValidationError est générée pendant la phase de validation des modèles. Contient par défaut "La contrainte %(name)sn'est pas respectée".
validate()Lien vers cette rubrique
- BaseConstraint.validate(model, instance, exclude=None, using=DEFAULT_DB_ALIAS)Lien vers cette définition
Valide que la contrainte définie sur le modèle est respectée pour l’instance. Cela produira une requête vers la base de données pour s’assurer que la contrainte est bien respectée. Si des champs de la liste exclude sont nécessaires pour valider la contrainte, celle-ci sera ignorée.
Génère ValidationError lorsque la contrainte n’est pas respectée.
Cette méthode doit être implémentée par les sous-classes.
CheckConstraintLien vers cette rubrique
- class CheckConstraint(*, condition, name, violation_error_code=None, violation_error_message=None)Lien vers cette définition
Crée une contrainte de vérification dans la base de données.
conditionLien vers cette rubrique
- CheckConstraint.conditionLien vers cette définition
Un objet Q ou une Expression booléenne qui indique le contrôle conditionnel que la contrainte souhaitée doit appliquer.
Par exemple :
CheckConstraint(condition=Q(age__gte=18), name="age_gte_18")
assure que le champ age n’est jamais plus petit que 18.
UniqueConstraintLien vers cette rubrique
- class UniqueConstraint(*expressions, fields=(), name, condition=None, deferrable=None, include=None, opclasses=(), nulls_distinct=None, violation_error_code=None, violation_error_message=None)Lien vers cette définition
Creates a uniqueness guarantee in the database, enforced by either a unique constraint or a unique index depending on the options used.
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 :
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=["room", "date"], name="unique_booking")
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 :
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
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.
Unique constraints with condition,
include, opclasses, or
expressions may be implemented as unique indexes
rather than unique constraints. In that case, deferrable cannot be set.
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 :
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.
Les contraintes d’unicité sur des colonnes n’étant pas des clés sont ignorées dans les bases de données autres que 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 :
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.
nulls_distinctLien vers cette rubrique
- UniqueConstraint.nulls_distinctLien vers cette définition
Indique si les lignes contenant des valeurs NULL couvertes par la contrainte d’unicité doivent être considérées comme distinctes les unes des autres. La valeur par défaut est None, ce qui indique que la valeur par défaut de la base de données est utilisée, celle-ci étant True pour la majorité des moteurs.
Par exemple :
UniqueConstraint(name="ordering", fields=["ordering"], nulls_distinct=False)
crée une contrainte d’unicité qui n’autorise qu’une seule ligne à contenir une valeur NULL dans la colonne ordering.
Unique constraints with nulls_distinct are ignored for databases besides
PostgreSQL.
violation_error_codeLien vers cette rubrique
- UniqueConstraint.violation_error_codeLien vers cette définition
Le code d’erreur utilisé lorsque une erreur ValidationError est générée pendant la phase de validation des modèles.
Vaut par défaut BaseConstraint.violation_error_code, quand soit UniqueConstraint.condition est définie ou que UniqueConstraint.fields n’est pas définie.
Si UniqueConstraint.fields est défini sans attr:.UniqueConstraint.condition, la valeur par défaut est le code d’erreur de Meta.unique_together quand il y a plusieurs champs, et le code d’erreur de Field.unique lorsqu’il n’y a qu’un seul champ.
violation_error_messageLien vers cette rubrique
- UniqueConstraint.violation_error_messageLien vers cette définition
Le message d’erreur utilisé lorsque une erreur ValidationError est générée pendant la phase de validation des modèles.
Vaut par défaut BaseConstraint.violation_error_message, quand soit UniqueConstraint.condition est définie ou que UniqueConstraint.fields n’est pas définie.
Si UniqueConstraint.fields est défini sans attr:.UniqueConstraint.condition, la valeur par défaut est le message d’erreur de Meta.unique_together quand il y a plusieurs champs, et le message d’erreur de Field.unique lorsqu’il n’y a qu’un seul champ.