Django模型-字段语法

时间:2018-11-25 00:24:21

标签: python django model

关于创建Django模型时某些语法的快速问题。如果您看一下下面的示例models.py文件,您会看到四个字段中的每个字段都包含一个重复的字段名,因为括号中的字符串在下划线之前。我认为这是某种形式的可视化表示形式,但是在admin中似乎自动发生,没有_('field name')。

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)

1 个答案:

答案 0 :(得分:0)

所有内置字段类型都继承自Field class。如果查看该类的__init__()调用,您会看到函数中的第一个参数是verbose_name参数。这样就告诉我们这些字符串映射到什么。

_('some text')构造是进行国际化的相当普遍的语法(也称为 i18n )。我已经在其他语言(例如PHP)中看到了这种语法。这样就可以在翻译代码时以各种语言显示详细名称。如您在上面的注释中所指出的,函数ugettext_lazy作为别名_被导入。这样,程序员(所有人都很懒惰)可以在需要翻译文本的每个位置键入_('some text')而不是ugettext_lazy('some text')。由于一个应用程序中可能有数百(或数千)个硬编码字符串,因此从长远来看,它可以节省程序员大量的时间。

这是一个丑陋的骇客,但可以完成工作。我特别不喜欢Python,因为它会覆盖有时有用的_名称,当您想丢掉一个值时,该名称通常用作占位符变量名称。