2010-08-08 41 views
4

這是關於在Django 1.2中實現的Format Localization功能。默認啓用Django格式本地化

爲了使用此功能,您必須將localize=True參數添加到所有表單域。我試圖在我的應用中實現這個本地化,但問題是我使用Django提供的inlineformset_factory方法動態創建我的表單,所以我不能簡單地向表單字段添加新參數。

因此,我試圖在所有模型中默認啓用此功能,而無需爲所有字段添加新參數。我創建了一個BaseInlineFormSet子類並對其中的參數進行了硬編碼。

class MyBaseInlineFormSet(BaseInlineFormSet): 
    def __init__(self, *args, **kwargs): 
     super(MyBaseInlineFormSet, self).__init__(*args, **kwargs) 
     for form in self.forms: 
      for key, field in form.fields.iteritems(): 
       if field.__class__ == forms.DecimalField: 
        form.fields[key].localize = True 

那隻工作了50%。提交時,表單現在正在被Django正確驗證(它接受逗號而不是隻有點),但是這些字段仍然顯示不正確。

我想我可以javascript我的方式擺脫這個問題,但我寧願避免這樣做。

關於如何解決這個問題的任何想法?

回答

6

Django 1.2現在是3歲。 Django的1.6提供了一個很好的方法來解決你的難題:

docs

默認情況下,在一個的ModelForm中的字段不會本地化他們的數據。要爲字段啓用本地化,您可以使用Meta類中的localized_fields屬性。

>>> from django.forms import ModelForm 
>>> from myapp.models import Author 
>>> class AuthorForm(ModelForm): 
...  class Meta: 
...   model = Author 
...   localized_fields = ('birth_date',) 

如果localized_fields設置爲特殊值__all__,所有字段將被本地化

0

我沒有用它 - (仍然picka項目在Django開發) - ,但作用似乎是子類的情況下 -

而是讓你的領域從forms.DecimalField繼承的,使他們是:

class LocalizedDecimalField(forms.DecimalField): 
    localize = True