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