2015-02-11 75 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