単一オブジェクトミックスイン—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/class-based-views/mixins-single-object
移動先:案内検索

単一オブジェクトのミックスイン

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

現在のHTTPリクエストに関連付けられているオブジェクトを検索するためのメカニズムを提供します。

メソッドと属性

model

このビューがデータを表示するモデル。 model = Fooを指定することは、queryset = Foo.objects.all()を指定することと実質的に同じです。ここで、objectsは、Fooデフォルトマネージャーを表します。

queryset

オブジェクトを表すQuerySet。 指定されている場合、querysetの値は、モデルに提供されている値よりも優先されます。

警告

querysetは、 mutable 値を持つクラス属性であるため、直接使用する場合は注意が必要です。 使用する前に、 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です。

この属性は、安全でない直接オブジェクト参照攻撃を軽減するのに役立ちます。 アプリケーションがシーケンシャルプライマリキーによる個々のオブジェクトへのアクセスを許可する場合、攻撃者はすべてのURLをブルートフォースで推測する可能性があります。 これにより、アプリケーション内のすべてのオブジェクトのリストを取得します。 個々のオブジェクトにアクセスできるユーザーがこのリストを取得できないようにする必要がある場合は、query_pk_and_slugTrueに設定すると、各URLに2つの正しい非順次引数が必要になるため、URLの推測を防ぐのに役立ちます。 一意のスラッグを使用しても同じ目的を果たすことができますが、このスキームでは、一意でないスラッグを使用できます。

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 属性が設定されている場合はその値を返し、そうでない場合はall()を呼び出して QuerySet を作成します。 model 属性のデフォルトマネージャーのメソッド。

get_context_object_name(obj)

このビューが操作しているデータを含めるために使用されるコンテキスト変数名を返します。 context_object_name が設定されていない場合、コンテキスト名は、クエリセットの構成元であるモデルのmodel_nameから作成されます。 たとえば、モデルArticleには、'article'という名前のコンテキストオブジェクトがあります。

get_context_data(**kwargs)

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

このメソッドの基本実装では、self.object属性をビューで設定する必要があります(Noneの場合でも)。 組み込みのビューがない状態でこのミックスインを使用している場合は、必ずこれを行ってください。

次の内容の辞書を返します。

  • object:このビューが表示しているオブジェクト(self.object)。

  • context_object_nameself.objectも、 get_context_object_name()によって返される名前で保存されます。デフォルトでは、モデル名の小文字バージョンになります。

コンテキスト変数は、テンプレートコンテキストプロセッサからの値をオーバーライドします

get_context_data()の変数は、コンテキストプロセッサのコンテキスト変数よりも優先されます。 たとえば、ビューで model 属性が User に設定されている場合、デフォルトのコンテキストオブジェクト名userは、user変数を[ X170X] django.contrib.auth.context_processors.auth()コンテキストプロセッサ。 get_context_object_name()を使用して、衝突を回避します。

get_slug_field()

スラッグによる検索に使用されるスラッグフィールドの名前を返します。 デフォルトでは、これは slug_field の値を返します。


SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

単一のオブジェクトインスタンスを操作するビューに対してテンプレートベースの応答レンダリングを実行するミックスインクラス。 混合されるビューが、ビューが操作されているオブジェクトインスタンスである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