2015-08-09 36 views
1

我們現在使用Django。Django管理模式複數模式全局設置,不添加後綴's'

而我們的語言是中文。

雖然你知道,在中文語法中,複數情況通常與單個情況相同。至少,不要在這個詞後加一個英文字母''。

因此,由於我們已將每個Model類的verbose_name設置爲中文,並且發現在管理面板中所有模型都顯示爲XX。

現在,我們必須手工設置複數,只是同爲verbose_name本身:

class Meta: 
    db_table = 'the_table_name' 
    verbose_name = 'object_name' 
    verbose_name_plural = 'object_name' 

那麼,有沒有什麼辦法來設置全局複數變換規則?

回答

1

指定'verbose_name_plural'是覆蓋django模型中元選項的簡單方法。

from django.db.models.base import ModelBase 

class CustomModelMetaClass(ModelBase): 

    def __new__(cls, name, bases, attrs): 
     klas = super(CustomModelMetaClass, cls).__new__(cls, name, bases, attrs) 
     klas._meta.verbose_name_plural = klas._meta.verbose_name 

     return klas 

現在使用此元類在你的模型像這樣

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

    __metaclass__ = CustomModelMetaClass 

它將設置:但是,如果你希望通過編程設置它,那麼你可以通過定義這樣您自己的元類來完成此verbose_name_plural與verbose_name相同。爲了驗證這一開殼,導入模型投票和打印

unicode(Poll._meta.verbose_name_plural) 
unicode(Poll._meta.verbose_name) 
+0

謝謝,這個工作,但正如你所說,這是不是爲了提高我的代碼的有效途徑。 –

+0

它與效率沒有關係。我只是想說,你應該使用metaclasses因果關係。如果它的工作正常,請接受答案。 –