---
title: "Classes mixins pour objet unique"
version: 5.1
locale: fr
source: https://docs.djangoproject.com/fr/5.1/ref/class-based-views/mixins-single-object/
canonical: https://djangodocs.dev/fr/5.1/ref/class-based-views/mixins-single-object/
---
# Classes mixins pour objet unique

## `SingleObjectMixin`

#### `class django.views.generic.detail.SingleObjectMixin`

Fournit un mécanisme pour rechercher un objet associé à la requête HTTP en cours.

**Méthodes et attributs**

#### `model`

Le modèle pour lequel cette vue va afficher des données. Indiquer `model = Foo` revient au même que de définir `queryset = Foo.objects.all()`, où `objects` correspond au [gestionnaire par défaut](/fr/5.1/topics/db/managers/#default-managers) de `Foo`.

#### `queryset`

Un objet `QuerySet` représentant les objets. Lorsqu’elle est renseignée, la valeur de `queryset` écrase la valeur fournie pour [`model`](#django.views.generic.detail.SingleObjectMixin.model).

> **Warning**
>
> `queryset` est un attribut de classe avec une valeur *modifiable*, il faut donc être très prudent lorsqu’on l’utilise directement. Avant de l’utiliser, appelez sa méthode [`all()`](/fr/5.1/ref/models/querysets/#django.db.models.query.QuerySet.all) ou obtenez-la avec [`get_queryset()`](#django.views.generic.detail.SingleObjectMixin.get_queryset) qui se charge du clonage en arrière-plan.

#### `slug_field`

Le nom du champ de modèle qui contient le slug. Par défaut, `slug_field` est `'slug'`.

#### `slug_url_kwarg`

Le nom du paramètre nommé dans l’URL contenant le slug. Par défaut, `slug_url_kwarg` est `'slug'`.

#### `pk_url_kwarg`

Le nom du paramètre nommé dans l’URL contenant la clé primaire. Par défaut, `pk_url_kwarg` est `'pk'`.

#### `context_object_name`

Désigne le nom de la variable à utiliser dans le contexte.

#### `query_pk_and_slug`

Si `True`, indique à [`get_object()`](#django.views.generic.detail.SingleObjectMixin.get_object) de rechercher un objet à la fois avec la clé primaire et le « slug ». Vaut `False` par défaut.

Cet attribut peut contribuer à prévenir les attaques de [référence directe d’objet non sécurisé](https://wiki.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References). Lorsque des applications permettent d’accéder à des objets individuels par une clé primaire séquentielle, un attaquant pourrait deviner toutes les URL par force brute, obtenant par là-même une liste de tous les objets de l’application. Si ceux qui peuvent accéder aux objets individuels ne devraient pas pouvoir obtenir toute la liste, la définition de `query_pk_and_slug` à `True` aide à empêcher la découverte des URL du fait que chaque URL nécessite deux paramètres corrects et non séquentiels. On pourrait obtenir un résultat semblable en exigeant un slug unique, mais ce système permet d’avoir des slugs non uniques.

#### `get_object(queryset=None)`

Renvoie l’objet unique que cette vue va afficher. Si `queryset` est indiqué, ce jeu de requête est utilisé comme source des objets ; sinon, [`get_queryset()`](#django.views.generic.detail.SingleObjectMixin.get_queryset) est appelée. `get_object()` recherche un paramètre [`pk_url_kwarg`](#django.views.generic.detail.SingleObjectMixin.pk_url_kwarg) dans les paramètres de la vue ; si ce paramètre est trouvé, cette méthode effectue une sélection basée sur la clé primaire avec cette valeur. Dans le cas contraire, elle consulte le paramètre [`slug_url_kwarg`](#django.views.generic.detail.SingleObjectMixin.slug_url_kwarg) et effectue une sélection basée sur le slug avec la valeur [`slug_field`](#django.views.generic.detail.SingleObjectMixin.slug_field).

Lorsque [`query_pk_and_slug`](#django.views.generic.detail.SingleObjectMixin.query_pk_and_slug) vaut `True`, `get_object()` rechercher son objet à la fois avec la clé primaire et le « slug ».

#### `get_queryset()`

Renvoie le jeu de requête qui sera utilisé pour récupérer l’objet que cette vue va afficher. Par défaut, [`get_queryset()`](#django.views.generic.detail.SingleObjectMixin.get_queryset) renvoie la valeur de l’attribut [`queryset`](#django.views.generic.detail.SingleObjectMixin.queryset) s’il est défini, sinon elle construit un objet [`QuerySet`](/fr/5.1/ref/models/querysets/#django.db.models.query.QuerySet) en appelant la méthode `all()` sur le gestionnaire par défaut de l’attribut [`model`](#django.views.generic.detail.SingleObjectMixin.model).

#### `get_context_object_name(obj)`

Renvoie le nom de la variable de contexte utilisée pour contenir les données que cette vue manipule. Si [`context_object_name`](#django.views.generic.detail.SingleObjectMixin.context_object_name) n’est pas défini, le nom du contexte correspondra au nom de modèle des objets contenus dans le jeu de requête. Par exemple, pour le modèle `Article`, la variable de contexte sera nommée `'article'`.

#### `get_context_data(**kwargs)`

Renvoie les données du contexte pour afficher l’objet.

L’implémentation de base de cette méthode exige que l’attribut `self.object` soit défini par la vue (même avec `None`). Assurez-vous de le définir si vous utilisez cette classe mixin sans l’une des vues intégrées qui le fait.

Renvoie un dictionnaire contenant :

- `object`: l’object affiché par cette vue (`self.object`).
- `context_object_name`: `self.object` sera aussi stocké sous le nom renvoyé par [`get_context_object_name()`](#django.views.generic.detail.SingleObjectMixin.get_context_object_name), qui équivaut par défaut au nom de modèle en minuscules.

> **Les variables de contexte écrasent les valeurs provenant des processeurs de contexte des gabarits**
>
> Toute variable de [`get_context_data()`](#django.views.generic.detail.SingleObjectMixin.get_context_data) a la priorité sur les variable de contexte provenant des [processeurs de contexte](/fr/5.1/ref/templates/api/#subclassing-context-requestcontext). Par exemple, si une vue définit l’attribut [`model`](#django.views.generic.detail.SingleObjectMixin.model) à [`User`](/fr/5.1/ref/contrib/auth/#django.contrib.auth.models.User), le nom d’objet de contexte par défaut `user` écrase la variable `user` définie par le processeur de contexte [`django.contrib.auth.context_processors.auth()`](/fr/5.1/ref/templates/api/#django.contrib.auth.context_processors.auth). Utilisez [`get_context_object_name()`](#django.views.generic.detail.SingleObjectMixin.get_context_object_name) pour éviter cette collision.

#### `get_slug_field()`

Renvoie le nom d’un champ de type slug à utiliser lors de la sélection par slug. Par défaut, cette méthode renvoie la valeur de [`slug_field`](#django.views.generic.detail.SingleObjectMixin.slug_field).

## `SingleObjectTemplateResponseMixin`

#### `class django.views.generic.detail.SingleObjectTemplateResponseMixin`

Une classe mixin produisant une réponse basée sur un gabarit pour les vues opérant sur une seule instance d’objet. Exige que la vue dans laquelle elle est intégrée fournisse `self.object`, l’instance d’objet sur laquelle la vue opère. `self.object` est généralement une instance d’un modèle Django, mais ce n’est pas une règle absolue. Elle peut valoir `None` si la vue est en cours de construction d’une nouvelle instance.

**Étend**

- [`TemplateResponseMixin`](/fr/5.1/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin)

**Méthodes et attributs**

#### `template_name_field`

Le champ de l’instance d’objet actuelle pouvant être utilisé pour déterminer le nom d’un gabarit potentiel. Si `template_name_field` lui-même ou la valeur de `template_name_field` pour l’instance d’objet actuelle vaut `None`, l’objet ne sera pas utilisé pour trouver un nom de gabarit potentiel.

#### `template_name_suffix`

Le suffixe à ajouter au nom de gabarit auto-généré. Le suffixe par défaut est `_detail`.

#### `get_template_names()`

Renvoie une liste de noms de gabarits potentiels. Cette liste contient :

- la valeur de `template_name` de la vue (s’il est défini)
- le contenu du champ `template_name_field` de l’instance d’objet sur laquelle la vue opère (si disponible)
- `<nom_app>/<nom_modèle><suffixe_gabarit>.html`
