単一オブジェクトミックスイン—Djangoドキュメント
単一オブジェクトのミックスイン
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_slug
をTrue
に設定すると、各URLに2つの正しい非順次引数が必要になるため、URLの推測を防ぐのに役立ちます。 一意のスラッグを使用しても同じ目的を果たすことができますが、このスキームでは、一意でないスラッグを使用できます。
- 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 属性が設定されている場合はその値を返し、そうでない場合は
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_name
:self.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