---
title: "複数オブジェクトミックスイン (Multiple object mixin)"
version: 5.1
locale: ja
source: https://docs.djangoproject.com/ja/5.1/ref/class-based-views/mixins-multiple-object/
canonical: https://djangodocs.dev/ja/5.1/ref/class-based-views/mixins-multiple-object/
---
# 複数オブジェクトミックスイン (Multiple object mixin)

## `MultipleObjectMixin`

#### `class django.views.generic.list.MultipleObjectMixin`

オブジェクトのリストを表示するために使用する Mixin です。

`paginate_by` が指定された場合、Django は結果をページネートします。URL 内のページ数は以下のいずれかの方法で指定します:

- URLconf 内で `page` パラメータを使用します。例えば、URLconf は以下のようになります:

  ```
  path("objects/page<int:page>/", PaginatedView.as_view()),
  ```
- ページ番号は `page` クエリ文字列パラメータで渡します。例えば、URLは以下のようになります：

  ```text
  /objects/?page=3
  ```

これらの値は (0 ベースではなく) 1 ベースなので、最初のページはページ `1` で表示されます。

ページ分割の詳細については、[ページ分割のドキュメント](/ja/5.1/topics/pagination/) を参照してください。

特別なケースとして、 `last` を `page` の値として使用することもできます：

```text
/objects/?page=last
```

これによって、自分で何ページ存在するかを調べることなく、最後のページにアクセスできます。

注意すべきなのは、`page` は有効なページ数ないし値 `last` の *どちらかでなければならない* ことです。`page` に対する他の値はすべて 404 エラーとなります。

**親クラス**

- [`django.views.generic.base.ContextMixin`](/ja/5.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)

**メソッドと属性**

#### `allow_empty`

有効なオブジェクトが 1 つもない場合にページを表示するかどうかを指定する真偽値です。`False` に指定してオブジェクトが存在しない場合、空のページの代わりに 404 を投げます。デフォルトは `True` です。

#### `model`

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

#### `queryset`

オブジェクトを表す `QuerySet` です。指定すると、`queryset` の値は [`model`](#django.views.generic.list.MultipleObjectMixin.model) の結果を上書きします。

> **Warning**
>
> `queryset` は *ミュータブル（編集可能）な* 値を伴うクラスの属性なので、直接使用する際には注意が必要です。この属性を使用する際は、 [`all()`](/ja/5.1/ref/models/querysets/#django.db.models.query.QuerySet.all) メソッドを呼び出すか、内部で複製処理を行う [`get_queryset()`](#django.views.generic.list.MultipleObjectMixin.get_queryset) でこれを取得するようにしてください。

#### `ordering`

`queryset` に適用される並び順を指定するための文字列ないし文字列のリストです。[`order_by()`](/ja/5.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by) に対するものと同じ値が有効です。

#### `paginate_by`

何個のオブジェクトが各ページに表示されるべきかを指定する数値です。この値が指定されると、各ページにおいて `paginate_by` 数のオブジェクトをページネートします。ビューには (`request.GET` を通じた) `page` クエリ文字列パラメータ、もしくは URLconf で `page` 変数が指定されることを必要とします。

#### `paginate_orphans`

最後のページが含むことができる "はみ出た" オブジェクトの数を指定する数値です。最後のページで、[`paginate_by`](#django.views.generic.list.MultipleObjectMixin.paginate_by) の制限を最大で `paginate_orphans` の値まで拡張し、最後のページでほんの少しのオブジェクトしか表示されないことを防ぎます。

#### `page_kwarg`

ページのパラメータに使用する名前を指定する文字列です。ビューは (`request.GET` を通じた) クエリ文字列パラメータ、もしくはURLconf 内で指定した kwarg が有効になっていることを必要とします。デフォルトは `page` です。

#### `paginator_class`

ページ分割に使用する paginator クラス。デフォルトでは [`django.core.paginator.Paginator`](/ja/5.1/ref/paginator/#django.core.paginator.Paginator) が使用されます。カスタムの paginator クラスが [`django.core.paginator.Paginator`](/ja/5.1/ref/paginator/#django.core.paginator.Paginator) と同じコンストラクタのインターフェースを持っていない場合は、 [`get_paginator()`](#django.views.generic.list.MultipleObjectMixin.get_paginator) の実装も用意する必要があります。

#### `context_object_name`

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

#### `get_queryset()`

このビューのための項目のリストを取得します。これは必ずイテラブルにするべきであり、クエリセットにされることが多いです(クエリセット特有の動作を有効にするため)。

#### `get_ordering()`

`queryset` に適用される順序を定義する、文字列(または文字列のイテラブル)を返します。

デフォルトでは [`ordering`](#django.views.generic.list.MultipleObjectMixin.ordering) を返します。

#### `paginate_queryset(queryset, page_size)`

(`paginator`, `page`, `object_list`, `is_paginated`) を含む 4-タプルを返します。

`queryset` をページ分割して `page_size` サイズのページを作成します。リクエストに `page` 引数（キャプチャ URL 引数または GET 引数）が含まれている場合、 `object_list` はそのページのオブジェクトに対応します。

#### `get_paginate_by(queryset)`

ページ分割を行うアイテムの数を返します。ページ分割を行わない場合は `None` を返します。デフォルトの戻り値は [`paginate_by`](#django.views.generic.list.MultipleObjectMixin.paginate_by) です。

#### `get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True)`

このビューで使用する paginator のインスタンスを返します。デフォルトでは [`paginator_class`](#django.views.generic.list.MultipleObjectMixin.paginator_class) のインスタンスを作成します。

#### `get_paginate_orphans()`

最後のページが含むことができる "overflow" オブジェクトの数を表す整数です。デフォルトでは [`paginate_orphans`](#django.views.generic.list.MultipleObjectMixin.paginate_orphans) の値を返します。

#### `get_allow_empty()`

オブジェクトがない場合にページを表示するかどうかを表す真偽値を返します。このメソッドが `False` を返し、利用可能なオブジェクトがない場合、ビューは空のページを表示する代わりに 404 を送出します。デフォルトでは `True` です。

#### `get_context_object_name(object_list)`

このビューが操作しているデータのリストを格納するために使用される、コンテキストの変数名を返します。もし `object_list` がDjangoオブジェクトのクエリセットであり、 [`context_object_name`](#django.views.generic.list.MultipleObjectMixin.context_object_name) が設定されていない場合、コンテキスト名はクエリセットを構成するモデルの `model_name` となり、接尾語として `'_list'` が付記されます。たとえば、 `Article` モデルなら `article_list` という名前のコンテキストオブジェクトを保持します。

#### `get_context_data(**kwargs)`

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

**コンテキスト**

- `object_list`: このビューが表示しているオブジェクトのリスト。もし `context_object_name` が指定された場合、その変数も `object_list` と同じ値でコンテキストに設定されます。
- `is_paginated`: 結果がページ分割されているかどうかを表す真偽値。具体的には、ページサイズが指定されていない場合や、利用可能なオブジェクトが複数ページにまたがっていない場合に `False` に設定されます。
- `paginator`: [`django.core.paginator.Paginator`](/ja/5.1/ref/paginator/#django.core.paginator.Paginator) のインスタンスです。ページがページ分割されていない場合、このコンテキスト変数は `None` になります。
- `page_obj`: [`django.core.paginator.Page`](/ja/5.1/ref/paginator/#django.core.paginator.Page) のインスタンスです。ページがページ分割されていない場合、このコンテキスト変数は `None` になります。

## `MultipleObjectTemplateResponseMixin`

#### `class django.views.generic.list.MultipleObjectTemplateResponseMixin`

オブジェクトインスタンスのリストを操作するビューに対してテンプレートベースのレスポンスレンダリングを行うミックスインクラスです。ミックスするビューが `self.object_list` を提供する必要があります。 `self.object_list` は、ビューが操作するオブジェクトインスタンスのリストです。 `self.object_list` は [`QuerySet`](/ja/5.1/ref/models/querysets/#django.db.models.query.QuerySet) でも大丈夫で、必須ではありません。

**親クラス**

- [`TemplateResponseMixin`](/ja/5.1/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin)

**メソッドと属性**

#### `template_name_suffix`

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

#### `get_template_names()`

テンプレート名の候補のリストを返します。以下のリストを返します：

- ビューの `template_name` の値 (もしあれば)
- `<app_label>/<model_name><template_name_suffix>.html`
