В моем приложении Django 1.7.11 я получаю данные, отформатированные с помощью испанского языка через HTTP. Таким образом, на мой взгляд, я получаю строку Юникода, представляющую десятичное число в испанской местности:Преобразовать строку unicode, ориентированную на язык, в действительном десятичном числе в Python/Django
spanish_number = request.GET.get('some_post_value', 0)
# spanish_number may be u'12,542' now, for example. And may come via POST. This is not important. Just the value itself is important: it contains commas as decimal separator.
И я хочу, чтобы сохранить, что в поле Django модели типа DecimalField:
class MyModel(models.Model):
my_number = models.DecimalField(max_digits=10, decimal_places=3, null=True, blank=True)
В моей settings.py, у меня есть
USE_L10N=True
USE_I18N=True
Если я пытаюсь что-то вроде
m = MyModel()
m.my_number = spanish_number # This is, u'12,542'
m.save()
Это терпит неудачу с ValidationError, потому что
u'12,542' must be a decimal number
Что бы правильный путь, чтобы справиться с этим? Я имею в виду, с тем, что мое приложение будет получать номера (и даты ...) отформатирован этот путь (испанский локали)
PS: Я знаю, Django имеет DecimalField для форм, с локализуют = Истинный вариант, но я напрямую имею дело с Модели, а не с Формами.
Пробовал, что. Не работает. Но я отлаживал код sanitize_separator и читал о настройках. Похоже, что настройки, такие как USE_L10N, USE_THOUSAND_SEPARATOR и т. Д., Используются для определения способа отображения номеров Django. Не говорит ничего о том, как сделать противоположную поездку (хранить локализованные данные). Или я не могу его найти. – jorgeas80
Хм. Похоже, эта функция требует 'USE_THOUSAND_SEPARATOR'' 'True' для обработки тысяч. Вы можете установить это значение «Истина», если хотите, чтобы локализованный разделитель тысяч использовался в других контекстах, переопределите функцию санитарии самостоятельно таким образом, чтобы она не зависела от нее, или сделать уродливый взлом модификации «settings.USE_THOUSAND_SEPARATOR» до и после дезинфекции. –