Django 模型中的元类
Vaibhav Vaibhav
2022年4月12日
2021年6月29日
元数据是指提供有关另一个数据的信息的一组特定数据。在 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)
在这里,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"
Author: Vaibhav Vaibhav