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 類可用於定義有關模型的各種內容,例如許可權、資料庫名稱、單複數名稱、抽象、排序等。向 Django 模型新增 Meta 類是完全可選的。

此類還帶有許多你可以配置的選項。以下是一些常用的元選項;你可以探索所有的元選項這裡

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)

在這裡,TeacherStudent 模型將包含 Human 模型內的所有欄位。在資料庫中,只會建立 TeacherStudent 模型。

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