gpt4 book ai didi

django - 使Django表单使用逗号作为小数点分隔符

转载 作者:行者123 更新时间:2023-12-03 13:45:50 27 4
gpt4 key购买 nike

我正在编写一个Django应用程序,供在使用逗号作为decimal separator的国家/地区使用。我有一个包含django.db.models.DecimalField的模型,并且使用model forms。如何使用逗号使结果表单字段呈现并接受用户的逗号?

遵循advicejweyrich之后,我已将应用程序从Django 1.1升级到Django 1.2,并编辑了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',
)


据我所知,这就是 the documentation所需要的。现在,如果我在表单字段上设置 localization=True,则它适用于表单。但是,它在 model formsthe admin site中均不起作用。

我从1.2发行版之前发现了 Django ticket和生成的 Django changeset。如果我正确理解它们,过去的情况是小部件会自动使用格式本地化,但是在此补丁本地化之后,必须通过将 localization=True关键字参数提供给form字段来显式打开补丁本地化。有没有办法在其字段上将管理表单设置为 localization=True

最佳答案

是的,确实需要为每个字段显式打开本地化。对于模型表单(包括管理应用程序中使用的模型表单),执行此操作的一种便捷方法是将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


然后,您可以定义您的自定义ModelForm类,并在管理应用中使用它:

class FooForm(LocalizedModelForm):

class Meta:
model = Foo


django.admin.site.register(Foo, form=FooForm)

关于django - 使Django表单使用逗号作为小数点分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203089/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com