模型中ugettext的用途

时间:2015-02-11 19:24:00

标签: python django gettext

在大量的Django tuts以及网上的任何地方,人们都会在模型类中创建如下所示的字段:

from django.db import models
from django.utils.translation import ugettext as _

class MyModel(models.Model)
    created = models.DateTimeField(
        _('Created'),
        auto_now_add=True
    )

我理解ugettext正在做什么,但我不明白为什么它被应用到,在这个例子中,'创建'。为什么不写:

created = models.DateTimeField(auto_now_add=True)

此外,'Created'指的是某些已在某处定义的东西?在此示例中,我没有在forms.py中看到它,也没有在views.py中传递。所以,无论它是什么,它只存在于这个模型中 - 或者我认为。

2 个答案:

答案 0 :(得分:2)

我非常确定它就像你没有定义该字符串一样简单,它会被用来识别ModelForm中的字段。如果您随后在自己的网站上使用各种语言,那么该字段就不会有与之关联的翻译字符串。

因此,您可以在forms.py;

中定义一个简单明了的表单
from django import forms

from .models import MyModel


class MyForm(forms.ModelForm):
    """
    MyForm is a nice a simple ModelForm using
    labels from MyModel.
    """

    class Meta:
        model = MyModel
        fields = ['created', ]

# views.py
from django.views.generic.edit import CreateView
from django.core.urlresolvers import reverse_lazy

from .forms import MyForm


class MyObjCreate(CreateView):
    form_class = MyForm

通过添加ugettext字符串,它将被拉入消息目录,然后可以进行翻译。至少从我的翻译经验来看,这是有道理的。

查看文档,尤其是关于模型class Meta的文档; https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#model-verbose-names-values

答案 1 :(得分:0)

需要用于翻译目的。如果你没有提供verbose_name Django将标记字段名称,但永远无法翻译它。请参阅此处了解文档https://docs.djangoproject.com/en/1.7/topics/i18n/translation/