Так как англоязычный мир использует в качестве разделителя десятичных дробей точку, у русскоязычных пользователей возникают некоторые проблемы. Начиная с Django 1.2 появилась возможность указать разделитель самостоятельно, но использоваться он будет только при выводе дробных, в формах же всё равно будет ожидаться только точка, даже если в локали ru-ru принята запятая.
Какие неудобства это вызывает? Например, если юзер копирует дробное значение со страницы на сайте или из таблицы в экселе и вставляет его в форму. В этом случае он будет удивлён ошибке валидации формы - число с запятой за число вообще не считается. Конечно, можно просто забить, и использовать везде точку, но не обязательно.
Выходов из ситуации несколько - либо заменять самостоятельно во входящих данных запятые на точки в классе формы, использовать модифицированный DecimalField, etc. Либо написать небольшой monkey patch, который будет делать то же самое, но во всех формах сразу, включая интерфейс администратора. Для этого добавим в project/__init__.py следующий код:
from django.forms import fields
from django.utils.encoding import smart_str
from django.utils import formats
from django.core.exceptions import ValidationError
from django.core import validators
from decimal import Decimal, DecimalException
def to_python(self, value):
if value in validators.EMPTY_VALUES:
return None
if self.localize:
value = formats.sanitize_separators(value)
value = smart_str(value).strip()
value = value.replace(',', '.')
try:
value = Decimal(value)
except DecimalException:
raise ValidationError(self.error_messages['invalid'])
return value
fields.DecimalField.to_python = to_python