.. _ref-models-options: .. _`Model Meta options`: =============================== モデルの ``Meta`` オプション =============================== :revision-up-to: 8961 (1.0) このドキュメントでは、モデルの内部クラス ``Meta`` に指定できる :ref:`メタデータオプション ` について解説しています。 ``Meta`` オプション ========================== .. currentmodule:: django.db.models ``abstract`` ------------ .. attribute:: Options.abstract ``True`` に設定すると、モデルを :ref:`抽象ベースクラス ` にします。 ``db_table`` ------------ .. attribute:: Options.db_table モデルの使うデータベーステーブルの名前です:: db_table = 'music_album' .. _table-names: テーブル名 ~~~~~~~~~~~ 手間を省くため、 Django はモデルクラスやアプリケーションの名前を元にデータ ベーステーブルの名前を導出します。モデルのデータベーステーブル名は、モデル の「アプリケーションラベル (app label)」、つまり ``manage.py startapp`` で 指定した名前と、モデルのクラス名をアンダースコアで結んで生成します。 例えば、 (``manage.py startapp bookstore`` で作成した) ``bookstore`` という アプリケーションの中に ``class Book`` で定義したモデルがあった場合そのデー タベーステーブルの名前は ``bookstore_book`` です。 データベーステーブル名をオーバライドしたければ、 ``class Meta`` に ``db_table`` パラメタを設定します。 データベーステーブル名が SQL の予約語と一致している場合や、ハイフンのように Python の変数名として扱えない文字を含んでいても問題ありません。 Django はカ ラムとテーブル名を舞台裏でクオート処理するからです。 ``db_tablespace`` ----------------- .. attribute:: Options.db_tablespace .. versionadded:: 1.0 このフィールドをインデクス化する際に、データベースのテーブルスペース上での フィールドのインデクスの名前に使います。テーブルスペースをサポートしていな いバックエンドでは、このオプションは無視されます。 ``get_latest_by`` ----------------- .. attribute:: Options.get_latest_by モデル中の :class:`DateField` または :class:`DateTimeField` の名前です。こ のオプションは、モデルの :class:`Manager` の :class:`~QuerySet.latest` メソッ ドが使うデフォルトのフィールドを指定します。 例えば:: get_latest_by = "order_date" 詳しくは :meth:`~django.db.models.QuerySet.latest` を参照してください。 ``order_with_respect_to`` ------------------------- .. attribute:: Options.order_with_respect_to オブジェクトを指定のフィールドで「並べ替え可能 (orderable)」にします。この オプションを使うのは、リレーションの張られたオブジェクトを、親オブジェクト に従って並べ替えたい場合がほとんどです。例えば、 ``Answer`` が ``Question`` にリレーションを張っており、一つの ``Question`` に複数の ``Answer`` があっ て、 ``Answer`` の順番が重要である場合は以下のようにします:: class Answer(models.Model): question = models.ForeignKey(Question) # ... class Meta: order_with_respect_to = 'question' ``ordering`` ------------ .. attribute:: Options.ordering オブジェクトのリストを取得するときに使われる、オブジェクトのデフォルトの並 び順規則です:: ordering = ['-order_date'] 値は文字列のタプルやリストです。各文字列はフィールドの名前で、降順に並べる 場合にはオプションの "-" を先頭に付けます。先頭に "-" のないフィールドは昇 順に並べられます。順番をランダムにするには "?" を使って下さい。 .. note:: :attr:`~Options.ordering` にいくつフィールド名を指定しても、 admin は先 頭のフィールドだけを考慮します。 例えば、 ``pub_date`` フィールドで昇順に並べる場合には以下のようにします:: ordering = ['pub_date'] ``pub_date`` フィールドで降順に並べる場合には以下のようにします:: ordering = ['-pub_date'] ``pub_date`` フィールドで降順に並べ、さらに ``author`` で昇順に場合には以下 のようにします:: ordering = ['-pub_date', 'author'] ``permissions`` --------------- .. attribute:: Options.permissions オブジェクトの生成時にパーミッションテーブルに追加するパーミッションのリス トです。 ``admin`` セットをもつオブジェクトには、追加、削除、変更のパーミッ ションが自動的に生成されます。以下の例では、 ``can_deliver_pizzas`` という追 加のパーミッションを定義しています:: permissions = (("can_deliver_pizzas", "Can deliver pizzas"),) ``(permission_code, human_readable_permission_name)`` の形式をとる 2 要素の タプルからなるリストです。 ``unique_together`` ------------------- .. attribute:: Options.unique_together 組み合わせとして一意にしなければならないフィールドセットのリストです:: unique_together = (("driver", "restaurant"),) このリストは、フィールド名のリストからなるリストです。各要素のリストに入っ ているフィールドの値の組み合わは、データベース上で一意でなければなりません。 この制約は Django の admin 上で使われるとともに、データベースレベルでも強制 されます (すなわち、適切な ``UNIQUE`` 文が ``CREATE TABLE`` 文に入ります)。 .. versionadded:: 1.0 便宜上、 ``unique_together`` は一つのリストのときは単一セットのフィールドと して扱います:: unique_together = ("driver", "restaurant") ``verbose_name`` ---------------- .. attribute:: Options.verbose_name 人間可読なオブジェクト名の単数形です:: verbose_name = "pizza" この引数を指定しない場合、Django はクラス名を解体した文字列を使います。例え ば ``CamelCase`` は ``camel case`` になります。 ``verbose_name_plural`` ----------------------- .. attribute:: Options.verbose_name_plural オブジェクトの複数形名です:: verbose_name_plural = "stories" この引数を指定しない場合、Django は :attr:`~Options.verbose_name` + "s"`` を使います。