2013-02-22 21 views
6

Tak, więc chcę przechowywać przetłumaczone opcje dla mojego modelu, ale Django nie zgadza się ze mną w tej sprawie. Wersja Django 1.3 i model i wybory coś jak to wygląda:Django: łączenie leniwego tłumaczenia ze znakiem bezpiecznym w wyborze modelu

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) 

Również wybory są wykorzystywane w ModelForm (dla innego modelu więc musiałem redeclare boiska) tak:

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

Problem polega na tym, że niezależnie od tego, co próbuję; śledzenie rzeczy na dokumentach django, odwracanie kolejności znaków i tłumaczenia, używanie leniwego tłumaczenia itp. itd. zawsze sprowadza się do pracy mark_safe lub tłumaczenia. Ale nigdy nie ...

Jak prawidłowo połączyć obie funkcje?

Odpowiedz

7

Dodaj:

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) 

A potem:

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

został dodany do Django 1.4 docs.

+0

z systemem django 1.3, i chociaż próbowałem go, nie mogłem go uruchomić. –