【问题标题】:Enable Django format localization by default默认启用 Django 格式本地化
【发布时间】:2010-08-08 06:02:10
【问题描述】:

这是关于在 Django 1.2 中实现的Format Localization 功能。

要使用此功能,您必须在所有表单字段中添加localize=True 参数。我正在尝试在我的应用程序中实现此本地化,但问题是我正在使用 Django 提供的 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

那只工作了 50%。提交时,Django 现在正在正确验证表单(它接受逗号而不是仅接受点),但字段仍然显示不正确。

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

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: python django localization formatting


    【解决方案1】:

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

    来自docs

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

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

    如果将localized_fields 设置为特殊值__all__,则所有字段都将被本地化

    【讨论】:

      【解决方案2】:

      我没用过——(还是要picka项目用Django开发)—— 但它似乎是子类化的情况 -

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

      class LocalizedDecimalField(forms.DecimalField):
          localize = True
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2012-07-10
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        相关资源
        最近更新 更多