代码之家  ›  专栏  ›  技术社区  ›  Cesar Canassa

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

  •  4
  • Cesar Canassa  · 技术社区  · 14 年前

    这是关于 Format Localization Django1.2中实现的特性。

    要使用此功能,必须添加 localize=True 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
    

    我想我可以用javascript解决这个问题,但我宁愿避免这样做。

    有什么办法解决这个问题吗?

    2 回复  |  直到 11 年前
        1
  •  6
  •   Cesar Canassa    11 年前

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

    docs :

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

    >>> from django.forms import ModelForm
    >>> from myapp.models import Author
    >>> class AuthorForm(ModelForm):
    ...     class Meta:
    ...         model = Author
    ...         localized_fields = ('birth_date',)
    

    __all__

        2
  •  0
  •   jsbueno    14 年前

    我还没用过它-(还在Django挑选一个要开发的项目)-

    不要让您的字段从forms.DecimalField继承,而是让它们成为:

    class LocalizedDecimalField(forms.DecimalField):
        localize = True