1

我对使用 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,它成功地将表格名称翻译成中文。然而,我未能根据所选语言更改多对多模型的返回值。我能做些什么。我不想将表单硬编码到我的模板中,因为它会很乏味。


既然有人说不可能,那就是另一个问题。如何将我的 attaching_model 呈现为表单,它根据用户定义的语言呈现多对多变化选择的显示名称?

这是我目前得到的。(啊!为什么?它禁止我发布图片)请假设 [] 为复选框。下面是 django 渲染的内容。(或此处的图片链接)

上課地點: 
[] Yuen Long District
[] Tuen Mun District
[] Tsuen Wan District
[] Kwai Tsing District
[] North District
[] Tai Po District

使用冗长的名称,它成功翻译为“上课地点”,但无法翻译它给出的选择名称,例如“Kwai Tsing District”。我也希望找到翻译它们的方法。

问题总结:找到翻译ManyToManyField选项的方法

4

1 回答 1

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
于 2013-05-20T13:59:03.483 回答