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