2013-02-22 4 views
6

Sì, quindi, voglio memorizzare le scelte tradotte per il mio modello, ma Django non è d'accordo con me su questo. La versione di Django è 1.3 e il modello e le scelte simile a questa:Django: combinare la traduzione lenta con il contrassegno sicuro nelle scelte di modello

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) 

Inoltre, le scelte sono utilizzati in una ModelForm (per un altro modello così ho dovuto ridichiarare campo) in questo modo:

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

Il problema è che non importa quello che cerco; seguendo le cose su django docs, invertendo l'ordine di mark_safe e traduzione, usando nessuna traduzione pigra ecc. ecc., si riduce sempre al lavoro mark_safe o alla traduzione. Ma mai entrambi ...

Come si combinano correttamente le due funzioni?

risposta

7

Add:

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) 

E poi:

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

Questo è stato aggiunto al Django 1.4 docs.

+0

in esecuzione django 1.3, e anche se l'ho provato, non ho potuto farlo funzionare. –

Problemi correlati