我正在编写一个Django应用程序,用于他们使用逗号作为小数分隔符的国家/地区.我有一个包含a的模型,django.db.models.DecimalField我使用模型表单.如何使用逗号生成结果表单字段并从用户接受逗号?
继咨询的jweyrich,我从Django的1.1我的应用程序升级到1.2的Django和编辑我的settings.py包含以下内容:
LANGUAGE_CODE = 'nb'
LANGUAGES = (
('nb', 'Norwegian'),
)
USE_I18N = True
USE_L10N = True
DECIMAL_SEPARATOR = ','
THOUSAND_SEPARATOR = ' '
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
据我所知,这就是文档所要求的.如果我localization=True在表单字段上设置它现在适用于表单.但是,它既不适用于模型,也不适用于管理站点.
我在1.2发布之前发现了一张Django票和一个Django变更集.如果我正确理解它们,过去的情况是小部件自动使用格式本地化,但在此之后,必须通过将localization=True关键字参数提供给表单字段来明确启用此修补程序本地化.有没有办法localization=True在他们的字段上设置管理表单?
Veb*_*osa 21
是的,需要为每个字段明确启用本地化.对于模型表单(包括管理应用程序中使用的表单),一种方便的方法是对ModelForm进行子类化并为每个DecimalField启用本地化:
import django
class LocalizedModelForm(django.forms.ModelForm):
def __new__(cls, *args, **kwargs):
new_class = super(LocalizedModelForm, cls).__new__(cls, *args, **kwargs)
for field in new_class.base_fields.values():
if isinstance(field, django.forms.DecimalField):
field.localize = True
field.widget.is_localized = True
return new_class
Run Code Online (Sandbox Code Playgroud)
然后,您可以定义自定义ModelForm类并在管理应用程序中使用它:
class FooForm(LocalizedModelForm):
class Meta:
model = Foo
django.admin.site.register(Foo, form=FooForm)
Run Code Online (Sandbox Code Playgroud)
在django> = 1.6中有一个简单的解决方案:
from django.forms import ModelForm
class YourModelForm(ModelForm):
class Meta:
model = YourModel
localized_fields = '__all__'
django.admin.site.register(YourModel, form=YourModelForm)
Run Code Online (Sandbox Code Playgroud)
对,这看起来像一个恼人的破损,我很惊讶没有人报告.由于您提到的更改,必须为管理应用或模型表单中的每个字段明确启用本地化.最好的方法是定义一个自定义的ModelForm,以便在管理员和应用程序中使用,并设置widgets字典以在每个相关字段上启用本地化.
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
widgets = {
'my_decimal_field': forms.TextInput(attrs={'localization': True}),
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10082 次 |
| 最近记录: |