2015-02-11 70 views
1

在大量的Django TUTS的,和网上随处可见的宗旨ugettext,人们将创建领域,如低于内的模型类:内部模型

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) 

此外,是'创造'指的是某些已定义的地方?在这个例子中,我没有看到它存在于forms.py中,也没有在views.py中传递。所以,不管它是什么,它只存在于这个模型中 - 或者我认为。

+0

另一个例子,这可能会发光在这种混淆发生的地方。我正在查看models.py for pybbm [链接](https://github.com/hovel/pybbm/blob/master/pybb/models.py),第226-228行有'body = models.TextField(_( 'Message'))''''body_html = models.TextField(_('HTML version'))''''body_text = models.TextField(_('Text version'))''。这些文本(消息,html vers和文本vers)在这些行中完成了什么? – kuanb 2015-02-11 19:29:20

回答

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

+0

明白了 - 谢谢 – kuanb 2015-02-11 22:45:09