2013-02-22 39 views
6

是的,所以,我想存儲翻譯的選擇爲我的模型,但Django不同意在這一個。 Django的版本是1.3,模型和選擇是這個樣子:Django:結合懶惰翻譯和標記在模型選擇安全

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) 

而且,選擇在一個的ModelForm使用(另一種模式,所以我不得不重新聲明場)像這樣:

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

問題是,無論我嘗試什麼,遵循django文檔中的內容,顛倒mark_safe和翻譯的順序,不使用懶惰翻譯等等,它總是歸結爲mark_safe工作或翻譯工作。但從來沒有...

如何正確地結合這兩個功能?

回答

7

地址:

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) 

然後:

mark_safe_lazy(string_concat('€ 0,05 ', _('per minute'))) 

這加入的Django 1.4 docs

+0

運行django 1.3,雖然我已經嘗試過了,但我無法得到它的工作。 – 2013-02-26 09:32:35