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

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

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

メソッドと属性

model

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

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

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

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

get_object(queryset=None)

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

query_pk_and_slugTrue のときは、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 になることがあります。

親クラス

メソッドと属性

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
Back to Top