在 Django 中,每个模型都包含一个名为 Meta 的内部类,该类允许我们声明有关模型的元数据。这些元数据可以用来控制模型的特定方面的行为,例如它们的排序,或者将模型转换为某个特定的格式。
下面是一些常见的 Django 元数据类属性及其含义:
db_table
db_table用于定义模型的数据库表名。如果没有指定,Django 使用模型类的名称和小写。例如:
class Person(models.Model):
name = models.CharField(max_length=30)
class Meta:
db_table = 'my_person_table'
ordering
ordering用于定义模型的默认排序方式。可以是一个列表或字符串。默认值是按主键升序排列。
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
class Meta:
ordering = ['age']
verbose_name 和 verbose_name_plural
verbose_name 和 verbose_name_plural用于定义模型的单数和复数名称,分别用于在管理界面和其他区域显示 model 的名称。
class Person(models.Model):
name = models.CharField(max_length=30)
class Meta:
verbose_name = 'Person'
verbose_name_plural = 'People'
unique_together
unique_together用于定义多个字段的唯一性约束。可以是一个元组或列表。
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
class Meta:
unique_together = ('name', 'age')
abstract
abstract声明该模型类只是抽象的,不应该直接用于数据库查询。
class AbstractPerson(models.Model):
name = models.CharField(max_length=30)
class Meta:
abstract = True
class Customer(AbstractPerson):
email = models.EmailField()
app_label
app_label定义该模型所属的应用名称。如果没有定义,Django 将会使用包含模型类的应用的名称作为默认值。
这个属性通常不需要手动设置,除非按某些方式重命名了应用或者已经将模型类分离到一个单独的模块
举例来说,假设你编写了一个模型类 Book 并将其存储在一个名为 myapp.models 的模块中。为了防止 Django 将其识别为具有默认应用程序名称的“未定义模型”,您需要在模型中指定应用程序名称
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
class Meta:
app_label = 'myapp'
indexes
indexes用于定义索引项。可以是字符串或列表。如下:
class Person(models.Model):
name = models.CharField(max_length=30, db_index=True)
age = models.IntegerField()
class Meta:
indexes = [
models.Index(fields=['name', 'age']),
models.Index(fields=['age']),
]
constraints
constraints定义模型的约束条件。可以是字符串或列表。
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
class Meta:
constraints = [
models.UniqueConstraint(fields=['name', 'age'], name='unique_name_age'),
models.CheckConstraint(check=models.Q(age__gte=18), name='adult_age'),
]
这些是 Django 可提供的一些常用元数据类属性,它们可以用于控制模型的某些方面的行为,例如排序、索引、唯一性约束、约束条件等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django Meta元数据类属性解析 - Python技术站