2013-02-22 23 views
6

Vâng, vì vậy, tôi muốn lưu trữ các lựa chọn đã dịch cho mô hình của mình, nhưng Django không đồng ý với tôi về mô hình này. Phiên bản của Django là 1.3 và các mô hình và lựa chọn giống như thế này:Django: kết hợp bản dịch lười biếng với nhãn hiệu an toàn trong các lựa chọn mô hình

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) 

Ngoài ra, lựa chọn được sử dụng trong một ModelForm (đối với mô hình khác vì vậy tôi đã phải redeclare lĩnh vực này) như sau:

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

Vấn đề là dù tôi có cố gắng gì đi nữa; sau các công cụ trên tài liệu django, thứ tự đảo ngược của mark_safe và dịch thuật, sử dụng không dịch lười biếng, vv vv nó luôn luôn đi xuống hoặc là mark_safe làm việc hoặc dịch làm việc. Nhưng không bao giờ cả hai ...

Làm cách nào để kết hợp hai chức năng chính xác?

Trả lời

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) 

Và sau đó:

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

này được đưa vào Django 1,4 docs.

+0

chạy django 1.3 và mặc dù tôi đã thử nó nhưng tôi không thể làm việc này. –

Các vấn đề liên quan