如何正确使用Django模型的verbose_name和verbose_name_plural属性

verbose_name='作者')上面代码中,verbose_name = '图书'verbose_name_plural = '图书列表'```上述代码中。

在Django开发中,我们经常需要使用模型来操作数据库。而每个模型都有一个名称,这个名称会在后台管理界面、表单验证及错误提示等地方被用到。为了更好地定制这些名称,Django提供了两个属性:verbose_name和verbose_name_plural。

什么是verbose_name和verbose_name_plural

在Django的模型中,每个字段都有一个默认的名称(例如CharField默认为“charfield”),如果没有指定任何其他选项,则该字段将作为其显示标签(label)显示。但是,在某些情况下,默认标签可能不够描述该字段的含义。

因此,我们可以通过设置 verbose_name 属性来自定义该字段的显示标签。例如:

“`

class Book(models.Model):

title = models.CharField(max_length=100, verbose_name=’书名’)

author = models.CharField(max_length=50, verbose_name=’作者’)

上面代码中,在创建Book模型时给title和author字段分别设置了 verbose_name 选项。

除此之外,还有一个类似于 verbose_name 的属性: verbose_name_plural 。它用于指定复数形式的对象名字。例如:

# …

class Meta:

verbose_name = ‘图书’

verbose_name_plural = ‘图书列表’

“`

上述代码中,在 Meta 类里设置了两个选项:verbose_name 和 verbose_name_plural。

verbose_name和verbose_name_plural的使用场景

在实际开发中,我们通常会将 verbose_name 和 verbose_name_plural 属性用于以下几个方面:

1. 后台管理界面

Django提供了一个强大的后台管理系统,它可以让我们很方便地对数据库进行操作。但是,默认情况下,在后台管理界面中显示的模型名可能并不符合我们的需求。因此,我们可以使用 verbose_name 和 verbose_name_plural 来自定义对象名称。

例如下图所示:

![image-20211105100532409](-res/raw/master/202111051005338.png)

上图中,在Book模型里分别设置了 title 和 author 的显示标签,并且在 Meta 类里设置了 verbose_name 和 verbose_name_plural 属性。这样,在后台管理界面中就能看到更加友好的名称。

如何正确使用Django模型的verbose_name和verbose_name_plural属性

2. 表单验证和错误提示

当用户提交表单时,如果有字段未填写或填写格式错误,则需要给出相应的提示信息。在这种情况下,verbose_name 和 verbose_name_plural 属性也能派上用场。

![image-20211105100636624](-res/raw/master/202111051006381.png)

上图中,在 BookForm 中分别设置了 title 和 author 的显示标签,并且在 Book 模型里设置了 verbose_name 属性。这样当用户提交表单时,如果有字段未填写,则会弹出相应的提示信息。

3. API返回值

当我们使用 Django REST framework 等框架开发API时,verbose_name 和 verbose_name_plural 属性也能用于自定义返回值。例如:

class BookSerializer(serializers.ModelSerializer):

model = Book

fields = (‘id’, ‘title’, ‘author’)

extra_kwargs = {

‘title’: {‘label’: ‘书名’},

‘author’: {‘label’: ‘作者’}

}

上述代码中,在BookSerializer里分别设置了 title 和 author 的显示标签,并且在extra_kwargs里指定了 verbose_name 选项。这样,在API返回值中就能看到更加友好的名称。

注意事项

1. verbose_name 和 verbose_name_plural 属性只对模型类有效,不能用于模型实例;

2. 如果你想完全掌控对象名称,可以不使用默认名称而直接指定一个字符串作为verbose_name和verbose_name_plural的值;

3. 如果没有设置 verbose_name 或者 verbose_name_plural 属性,则Django将会自动根据模型名生成默认标签(例如“Book”将被转换为“book”);

4. 在 Meta 中必须同时设置两个选项:verbose_name 和 verbose_name_plural。

通过本文的讲解,我们了解到了 Django 模型中的两个属性:verbose_name 和 verbose_name_plural。它们可以帮助我们更好地定制显示标签,并且适用于后台管理界面、表单验证和API返回值等多个场景。

在使用时,需要注意 Meta 中必须同时设置两个选项:verbose_name 和 verbose_name_plural。另外,如果没有设置 verbose_name 或者 verbose_name_plural 属性,则Django将会自动根据模型名生成默认标签。

最后,希望本文能够帮助到大家,让大家更好地掌握 Django 模型的相关知识。