# Django 5.2.9 ドキュメント

# 単一オブジェクト ミックスイン (Single object mixin)

## `SingleObjectMixin`

class django.views.generic.detail.SingleObjectMixin

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

  メソッドと属性

  model

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

  queryset

    オブジェクトを表す `QuerySet` です。指定すると、`queryset` の値は `model` の結果を上書きします。

    警告

    `queryset` は ミュータブル（編集可能）な 値を伴うクラスの属性なので、直接使用する際には注意が必要です。この属性を使用する際は、 `all()` メソッドを呼び出すか、内部で複製処理を行う `get_queryset()` でこれを取得するようにしてください。

  slug_field

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

  slug_url_kwarg

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

  pk_url_kwarg

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

  context_object_name

    コンテキストで使用する変数名を指定します。

  query_pk_and_slug

    If `True`, causes `get_object()` to perform its lookup using both the primary key and the slug. Defaults to `False`.

    この属性は insecure direct object reference 攻撃を軽減するのに役立ちます。アプリケーションがシーケンシャルな主キーによる個々のオブジェクトへのアクセスを許可している場合、攻撃者はすべての URL をブルートフォースで推測できます。個々のオブジェクトへのアクセス権を持つユーザーがこのリストを取得するのを防ぎたい場合、`query_pk_and_slug` を `True` に設定することで、URLの推測を防ぐのに役立ちます。これは各URLが2つの正しい、連続しない引数を必要とするためです。一意なスラグを使用することでも同じ目的を達成できますが、このスキームでは一意ではないスラグを使用できます。

  get_object(queryset=None)

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

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

  get_queryset()

    ビューが表示するオブジェクトを取得するために使われる、クエリセットを返します。デフォルトでは、`get_queryset()` が `queryset` 属性がセットされていればこの値を返しますが、セットされていない場合は `model` のデフォルトのマネージャーの `all()` を呼んで `QuerySet` を組み立てます。

  get_context_object_name(obj)

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

  get_context_data(**kwargs)

    オブジェクトを表示するためのコンテキストデータを返します。

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

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

    - `object`: ビューが表示しているオブジェクトです (`self.object`)。

    - `context_object_name`: `self.object` は、`get_context_object_name()` によって返された名前の下でも保持されます。デフォルトではモデル名の小文字の文字列となります。

    コンテキスト変数は、テンプレートコンテキストプロセッサの値を上書きします

    `get_context_data()` からのあらゆる変数は、 コンテキストプロセッサ からの変数より優先されます。例えば、ビューが `model` 属性を `User` にセットする場合、 `user` のデフォルトのオブジェクト名は `django.contrib.auth.context_processors.auth()` からの `user` 変数をオーバーライドします。衝突を避けるには `get_context_object_name()` を使ってください。

  get_slug_field()

    スラグで検索する際に使用するスラグフィールドの名前を返します。デフォルトでは `slug_field` の値を返します。

## `SingleObjectTemplateResponseMixin`

class django.views.generic.detail.SingleObjectTemplateResponseMixin

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

  親クラス

  - `TemplateResponseMixin`

  メソッドと属性

  template_name_field

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

  template_name_suffix

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

  get_template_names()

    候補となるテンプレート名のリストを返します。値に `template_name` が設定されていれば、それを含むリストを返します。設定されていない場合は、以下を含むリストを返します。

    - (有効な場合) ビューが操作するオブジェクトインスタンス上の `template_name_field` の内容

    - `<app_label>/<model_name><template_name_suffix>.html`