Python 默认情况下启用Django格式本地化

Python 默认情况下启用Django格式本地化,python,django,localization,formatting,Python,Django,Localization,Formatting,这是关于Django 1.2中实现的特性 要使用此功能,必须向所有表单字段添加localize=True参数。我试图在我的应用程序中实现这种本地化,但问题是我使用Django提供的inlineformset\u factory方法动态创建表单,因此我不能简单地向表单字段添加新参数 因此,我尝试在所有模型中默认启用此功能,而无需为所有字段添加新参数。我创建了一个BaseInlineFormSet子类,并对其中的参数进行了硬编码 class MyBaseInlineFormSet(BaseInlin

这是关于Django 1.2中实现的特性

要使用此功能,必须向所有表单字段添加
localize=True
参数。我试图在我的应用程序中实现这种本地化,但问题是我使用Django提供的
inlineformset\u 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解决这个问题,但我宁愿避免这样做

关于如何解决这个问题,你有什么想法吗?

我还没有用过它(仍在挑选一个项目在Django开发)—— 但这似乎是子类化的情况-

不要让字段继承forms.DecimalField,而是将其设置为:

class LocalizedDecimalField(forms.DecimalField):
    localize = True

Django 1.2现在已经3岁了。Django 1.6提供了一个很好的方法来解决您的困境:

从:

默认情况下,ModelForm中的字段不会本地化其数据。要启用字段的本地化,可以在元类上使用本地化的_fields属性

>>> from django.forms import ModelForm
>>> from myapp.models import Author
>>> class AuthorForm(ModelForm):
...     class Meta:
...         model = Author
...         localized_fields = ('birth_date',)
如果本地化字段设置为特殊值
\uuu all\uu
,则所有字段都将本地化