2010-11-07 2 views
3

У меня есть проект со многими DecimalFields, которые отображаются более чем в 300 шаблонах. Я бы хотел, чтобы эти десятичные поля были нормализованы. Я не забочусь о преципитации или что-то еще:redefine default filtering поведение в шаблонах Django

decimal.Decimal("10.0000").normalize() 

Я не нашел способ изменить систему рендеринга по умолчанию. Я знаю, что в моих шаблонах я могу использовать фильтр humanize и floatformat. Но мне нужно решение, которое не означает редактирование всех этих файлов, даже если скрипт оболочки может быть написан.

Благодаря

ответ

2

Вы можете создать подкласс DecimalField где вы переопределять DecimalField.__str__ или DecimalField.__unicode__ в соответствии с вашими потребностями. Этот метод вызывается всякий раз, когда значение нужно визуализировать в шаблоне или еще много чего. Вам нужно будет только изменить свои модели.

Код для Field класс: here. DecimalField является подклассом этого. Документация о подклассах Field: http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#writing-a-field-subclass

Также см этого наконечника abount методы __unicode__: http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#some-general-advice

Edit: Я waaay устал, чтобы сделать какой-либо смысл в данный момент.

+0

Я думал format_number продержали Oracle, я изменил format_number код напрямую в Django и ничего не происходит, его не вызывают, когда значение отображается. Вы уверены в том, что говорите? Также нет документации по этому методу в djangoproject. Спасибо – maraujop

+0

Да, вы правы. Прошу прощения за то, что я запутался. См. Мое редактирование, я думаю, что на этот раз я понял. :) – knutin

+0

Я редактировал метод __unicode__ DecimalField, чтобы добавить простую печать, чтобы увидеть, когда она вызвана, и я не видел нигде, где бы я ни отображал значение в шаблоне. Спасибо за редактирование вашего ответа, я начинаю думать, что у моего вопроса нет ответа. – maraujop

Смежные вопросы