Включить локализацию формата Django по умолчанию - PullRequest
4 голосов
/ 08 августа 2010

Речь идет о функции Форматная локализация , которая была реализована в Django 1.2.

Чтобы использовать эту функцию, необходимо добавить параметр localize=True во все поля формы.Я пытаюсь реализовать эту локализацию в своем приложении, но проблема в том, что я создаю свои формы динамически, используя метод inlineformset_factory, который предоставляет Django, поэтому я не могу просто добавить новый параметр в поле формы.

Поэтому я попытался включить эту функцию по умолчанию во всех моделях, не добавляя новый параметр для всех полей.Я создал подкласс 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 (он принимает запятые, а не только точки), но поля по-прежнему отображаются неправильно.

Полагаю, я мог бы избавиться от этой проблемы, но япредпочитаете избегать этого.

Есть идеи, как это решить?

Ответы [ 2 ]

6 голосов
/ 26 августа 2013

Django 1.2 исполнилось 3 года. Django 1.6 предоставляет хороший способ решить вашу дилемму:

Из документов :

По умолчанию поля в ModelForm не локализуют свои данные. Чтобы включить локализацию для полей, вы можете использовать атрибут localized_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__, все поля будут локализованы

0 голосов
/ 08 августа 2010

Я не использовал его - (все еще для того, чтобы выбрать проект для разработки в Django) - но он выглядит как случай подкласса -

Вместо того, чтобы ваши поля наследовали от форм.им быть:

class LocalizedDecimalField(forms.DecimalField):
    localize = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...