---
title: "Single object mixins"
version: 2.2
locale: ja
source: https://docs.djangoproject.com/ja/2.2/ref/class-based-views/mixins-single-object/
canonical: https://djangodocs.dev/ja/2.2/ref/class-based-views/mixins-single-object/
---
# Single object mixins

## `SingleObjectMixin`

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

現在の HTTP レスポンスに紐付いたオブジェクトをルックアップするための枠組みを提供します。

**Methods and Attributes**

#### `model`

このビューがデータを表示する対象のモデルです。`model = Foo` と指定することは、`queryset = Foo.objects.all()` の効率的な書き方で、 `objects` は `Foo` の [デフォルトマネージャ](/ja/2.2/topics/db/managers/#default-managers) を表します。

#### `queryset`

オブジェクトを表す `QuerySet` です。指定すると、`queryset` の値は [`model`](#django.views.generic.detail.SingleObjectMixin.model) の結果を上書きします。

> **Warning**
>
> `queryset` is a class attribute with a *mutable* value so care
> must be taken when using it directly. Before using it, either call
> its [`all()`](/ja/2.2/ref/models/querysets/#django.db.models.query.QuerySet.all) method or
> retrieve it with [`get_queryset()`](#django.views.generic.detail.SingleObjectMixin.get_queryset) which takes care of the
> cloning behind the scenes.

#### `slug_field`

スラグを含むモデル上のフィールドの名前です。デフォルトでは、`slug_field` は `'slug'` です。

#### `slug_url_kwarg`

スラグを含む URLConf キーワード引数の名前です。デフォルトでは、`slug_url_kwarg` は `'slug'` です。

#### `pk_url_kwarg`

プライマリキーを含む URLConf キーワード引数の名前です。デフォルトでは、`pk_url_kwarg` は `'pk'` です。

#### `context_object_name`

Designates the name of the variable to use in the context.

#### `query_pk_and_slug`

`True` の場合、[`get_object()`](#django.views.generic.detail.SingleObjectMixin.get_object) がルックアップの際にプライマリキーとスラグの両方を使うようになります。デフォルトは `False` です。

この属性は [安全でない直接オブジェクト参照](https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References) 攻撃を軽減するのに役立ちます。 アプリケーションが連番のプライマリキーによって個々のオブジェクトにアクセスできるようにすると、攻撃者はすべての URL をブルートフォースで推測して、 アプリケーション内のすべてのオブジェクトのリストを取得してしまいます。 個々のオブジェクトにアクセスできるユーザがこのリストを取得できないようにするには、`query_pk_and_slug` を \`\` True\`\`に設定すると、各URLが 2 つの正しい非連番引数を必要とするため、URLを推測するのを防ぎます。 ユニークなスラグを使用するだけでも同じ目的を果たすことができますが、このスキームを使うことでユニークでないスラグを使用することができます。

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

ビューが表示する単一のオブジェクトを返します。 `queryset` が指定されている場合、そのクエリセットがオブジェクトのソースとして使用されます。 それ以外の場合は、 [`get_queryset()`](#django.views.generic.detail.SingleObjectMixin.get_queryset) が使用されます。`get_object()` は、ビューへの引数の中から [`pk_url_kwarg`](#django.views.generic.detail.SingleObjectMixin.pk_url_kwarg) 引数を探します。 この引数が見つかった場合、このメソッドはその値を使用してプライマリキーベースのルックアップを実行します。 この引数が見つからなかった場合は、[`slug_url_kwarg`](#django.views.generic.detail.SingleObjectMixin.slug_url_kwarg) 引数を探し、[`slug_field`](#django.views.generic.detail.SingleObjectMixin.slug_field) を使用してスラグのルックアップを実行します。

[`query_pk_and_slug`](#django.views.generic.detail.SingleObjectMixin.query_pk_and_slug) が `True` のときは、`get_object()` はプライマリキーとスラグの両方を使ってルックアップを実施します。

#### `get_queryset()`

ビューが表示するオブジェクトを取得するために使われる、クエリセットを返します。デフォルトでは、[`get_queryset()`](#django.views.generic.detail.SingleObjectMixin.get_queryset) が [`queryset`](#django.views.generic.detail.SingleObjectMixin.queryset) 属性がセットされていればこの値を返しますが、セットされていない場合は [`model`](#django.views.generic.detail.SingleObjectMixin.model) のデフォルトのマネージャーの `all()` を呼んで [`QuerySet`](/ja/2.2/ref/models/querysets/#django.db.models.query.QuerySet) を組み立てます。

#### `get_context_object_name(obj)`

ビューが操作するデータを格納するために使われる、コンテクストの変数名を返します。[`context_object_name`](#django.views.generic.detail.SingleObjectMixin.context_object_name) がセットされていない場合、コンテクスト名はクエリセットを構成するモデルの `model_name` から組み立てられます。例えば、モデル `Article` のコンテクストオブジェクトは `'article'` と名付けられます。

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

Returns context data for displaying the object.

このメソッドの基本的な実装では、`self.object` 属性が (たとえ `None` でも)ビューによってセットされることが必須です。 この mixin をビルトインのビュー以外で使うときには、この実装を忘れないでください。

下記の内容のディクショナリを返します。

- `object`: ビューが表示しているオブジェクトです (`self.object`)。
- `context_object_name`: `self.object` は、[`get_context_object_name()`](#django.views.generic.detail.SingleObjectMixin.get_context_object_name) によって返された名前の下でも保持されます。デフォルトではモデル名の小文字の文字列となります。

> **コンテキスト変数によるテンプレートコンテキストプロセッサからの変数への上書き**
>
> [`get_context_data()`](#django.views.generic.detail.SingleObjectMixin.get_context_data) からのあらゆる変数は、[context processors](/ja/2.2/ref/templates/api/#subclassing-context-requestcontext) からの変数より優先されます。例えば、ビューが the [`model`](#django.views.generic.detail.SingleObjectMixin.model) 属性を [`User`](/ja/2.2/ref/contrib/auth/#django.contrib.auth.models.User) にセットする場合、`user` のデフォルトのオブジェクト名は func:django.contrib.auth.context\_processors.auth からの `user` 変数をオーバーライドします。衝突を避けるには [`get_context_object_name()`](#django.views.generic.detail.SingleObjectMixin.get_context_object_name) を使ってください。

#### `get_slug_field()`

スラグによってルックアップするために使われるスラグフィールドの名前を返します。デフォルトでは、単に [`slug_field`](#django.views.generic.detail.SingleObjectMixin.slug_field) の値を返します。

## `SingleObjectTemplateResponseMixin`

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

単一のオブジェクトインスタンスを操作するビューをレンダリングする、テンプレートベースのレスポンスを実行する mixin クラスです。 混合されたビューは、操作するオブジェクトインスタンスである `self.object` が必要です。 `self.object` は、通常 (必須ではありませんが) Django モデルのインスタンスです。 ビューが新しいインスタンスを構築中の場合は、`None` になることがあります。

**Extends**

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

**Methods and Attributes**

#### `template_name_field`

現在のオブジェクトインスタンス上のフィールドで、テンプレートの名前の候補を決定するために使用できます。 `template_name_field` 自体、または現在のオブジェクトインスタンスの `template_name_field` の値のいずれかが `None` の場合、オブジェクトはテンプレート名候補として使用されません。

#### `template_name_suffix`

自動生成されたテンプレート名候補に追加する接尾辞です。 デフォルトの接尾辞は `_detail` です。

#### `get_template_names()`

Returns a list of candidate template names. Returns the following list:

- the value of `template_name` on the view (if provided)
- (有効な場合) ビューが操作するオブジェクトインスタンス上の `template_name_field` の内容
- `<app_label>/<model_name><template_name_suffix>.html`
