我在使用Django方面很新,我在将特定的许多项目作为其语言的表单呈现时遇到了一些麻烦。我试图做的是以下几点。
from django.utils.translation import ugettext_lazy as _
class failure_example_manytomany(models.Model):
name = models.Charfield(...)
chinese_name = models.Charfield(...)
def __unicode__(self):
return self.name #problem is on this return value
class attaching_model(models.Model):
(...)
normal_field = models.Charfield(_('translatable_name_here'), max_length=128)
manytomany_field = models.ManyToManyField(failure_example_manytomany, blank=True, verbose_name=_('translatable_name_here'))
(...)
我打开了il8n并成功将表单的名称翻译成中文。然而,我未能根据所选语言改变我的多人模型的返回值。我能做什么。我不想将表单硬编码到我的模板中,因为它会很乏味。
既然有人说这是不可能的,那么事实证明这是另一个问题。 如何根据用户定义的语言将attachment_model渲染为表单,其中显示多种选择的显示名称变化?
这是我目前得到的。 (Gah!为什么?我不发布照片)请假设[]作为复选框。以下是django呈现的内容。 (或图片链接here)
上課地點:
[] Yuen Long District
[] Tuen Mun District
[] Tsuen Wan District
[] Kwai Tsing District
[] North District
[] Tai Po District
用详细的名称,它成功地翻译成“上课地点”,但它无法改变它给出的选择的名称,例如“葵青区”。我希望找到一种方法来翻译它们。
问题摘要:找到翻译ManyToManyField选项的方法
答案 0 :(得分:1)
经过好几周,我终于找到了一个完美的解决方案。 我兼容静态i18n翻译。我的代码看起来相当干净,它完成了工作!它根据选择的LANGUAGE_CODE
更改语言#models.py
class manytomany(models.Model):
name_zh = models.CharField(max_length=128)
name_en = models.CharField(max_length=128)
class attaching_model(models.Model):
normal_field = models.Charfield(_('translatable_name_here'), max_length=128)
manytomany_field = models.ManyToManyField(manytomany, blank=True, verbose_name=_('translatable_name_here'))
#forms.py
class attaching_modelForm(forms.ModelForm):
class Meta:
model=attaching_model
def __init__(self, *args, **kwargs):
lang_code = kwargs.pop('lang_code')
if lang_code == 'zh-tw': #since model name doesn't accept hyphens
lang_code = 'zh'
super(attaching_modelForm, self).__init__(*args, **kwargs)
self.fields['manytomany_field'].choices = manytomany.objects.values_list('id','name_%s' % lang_code)
#views.py
form = attaching_modelForm(request.POST or None, request.FILES or None, lang_code = translation.get_language()) #calling the bound/unbound form