Django モデルのメタクラス

Vaibhav Vaibhav 2022年4月12日
Django モデルのメタクラス

メタデータとは、別のデータに関する情報を提供する特定のデータセットを指します。Django では、Django モデルを使用してデータベースのテーブルとそのフィールドを設計します。モデル自体に関するデータを追加する必要がある場合は、Meta クラスを使用します。この記事で、Django モデルの Meta クラスの詳細を確認してください。

Django の Meta クラス

Meta クラスは内部クラスです。つまり、モデル内で次のように定義されています。

from django.db import models


class MyModel(models.Model):
    ...

    class Meta:
        ...

Meta クラスを使用して、権限、データベース名、単数形と複数形の名前、抽象化、順序付けなど、モデルに関するさまざまなことを定義できます。Meta クラスの Django モデルへの追加は完全にオプションです。

このクラスには、構成可能な多くのオプションも付属しています。以下は、一般的に使用されるメタオプションの一部です。あなたはすべてのメタオプションを探索することができますここ

Django メタオプション-要約

このオプションは、モデルが抽象的であるかどうかを定義するために使用されます。それらは抽象クラスと同じように機能します。抽象クラスは、インスタンス化できず、拡張または継承のみが可能なクラスです。

抽象として設定されたモデルは、継承することしかできません。共通のフィールドを持つモデルが複数ある場合は、このオプションを使用できます。

from django.db import models


class Human(models.Model):
    genders = (
        ("M", "Male"),
        ("F", "Female"),
        ("NB", "Non-binary"),
        ("T", "Transgender"),
        ("I", "Intersex"),
        ("O", "Other"),
        ("PNTS", "Prefer not to say"),
    )

    name = models.CharField(max_length=200)
    age = models.IntegerField(default=0)
    gender = models.CharField(max_length=50, choices=genders)

    class Meta:
        abstract = True  # Important


class Teacher(Human):
    subject = models.CharField(max_length=200)


class Student(Human):
    grade = models.IntegerField(default=0)

ここで、Teacher モデルと Student モデルには、Human モデル内のすべてのフィールドがあります。データベース内では、Teacher モデルと Student モデルのみが作成されます。

Django メタオプション-db_table

このオプションは、データベース内のテーブルを識別するために使用する名前を設定するために使用されます。例:次のようにすると、モデルの名前はデータベースで job になります。

from django.db import models


class JobPosting(models.Model):
    class Meta:
        db_table = "job"

Django メタオプション-注文

このオプションは、モデルフィールドである文字列値のリストを取ります。モデルのオブジェクトの順序を定義するために使用されます。このモデルのオブジェクトが取得されると、それらはこの順序で存在します。

from django.db import models


class JobPosting(models.Model):
    dateTimeOfPosting = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-dateTimeOfPosting"]

上記の例では、取得されたオブジェクトは、dateTimeOfPosting フィールドに基づいて降順で並べ替えられます。(- プレフィックスは降順を定義するために使用されます。)

Django メタオプション-verbose_name

このオプションは、モデルの人間が読める形式の単数名を定義するために使用され、Django のデフォルトの命名規則を上書きします。この名前は、管理パネル(/admin/)にも反映されます。

from django.db import models


class JobPosting(models.Model):
    class Meta:
        verbose_name = "Job Posting"

Django メタオプション-Verbose_name_plural

このオプションは、モデルの人間が読める複数形の名前を定義するために使用されます。これにより、Django のデフォルトの命名規則が上書きされます。この名前は、管理パネル(/admin/)にも反映されます。

from django.db import models


class JobPosting(models.Model):
    class Meta:
        verbose_name_plural = "Job Postings"
著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

関連記事 - Django Model