単一オブジェクト ミックスイン (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¶
True
の場合、get_object()
がルックアップの際にプライマリキーとスラグの両方を使うようになります。デフォルトは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
になることがあります。親クラス
メソッドと属性
- 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