Django:在模型选择中将懒惰翻译与标记安全相结合

All*_*man 8 forms django translation model html-entities

是的,所以,我想为我的模型存储翻译的选择,但Django在这一点上不同意我的看法.Django的版本是1.3,模型和选择看起来像这样:

from django.db import models
from django.utils.safestring import mark_safe          
from django.utils.translation import ugettext_lazy as _

RATE_CHOICES = (
    ('', _('Choose service rate')),
    ('5cpm_EUR', mark_safe(string_concat('€ 0,05 ', _('per minute')))),
    ('1cpm_EUR', mark_safe(string_concat('€ 0,01 ', _('per minute')))),
)

class Product(models.Model):
    service_rate = models.CharField(_('service rate'), max_length=10, blank=True, choices=RATE_CHOICES)
Run Code Online (Sandbox Code Playgroud)

此外,选择用于模型形式(对于另一个模型,所以我必须重新声明该字段),如下所示:

service_rate = forms.ChoiceField(choices=RATE_CHOICES, widget=forms.Select(attrs={'class': 'chzn-select rate-select'}), required=False)
Run Code Online (Sandbox Code Playgroud)

问题在于无论我尝试什么; 遵循django文档中的内容,颠倒mark_safe和翻译的顺序,不使用延迟翻译等.它总是归结为mark_safe工作或翻译工作.但从来没有......

如何正确组合这两个功能?

Mil*_*sic 8

加:

from django.utils import six  # Python 3 compatibility
from django.utils.functional import lazy
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _

mark_safe_lazy = lazy(mark_safe, six.text_type)
Run Code Online (Sandbox Code Playgroud)

然后:

mark_safe_lazy(string_concat('€ 0,05 ', _('per minute')))
Run Code Online (Sandbox Code Playgroud)

这被添加到Django 1.4 文档中.