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