2010-08-08 74 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