python - 在 Django 中全局设置 Decimal 选项

标签 python django

Python 中小数的默认舍入方法是 ROUND_HALF_EVEN。

我有一个 Django 2.0 应用需要在所有模型 DecimalFields 中使用 ROUND_HALF_UP。

我已经尝试了这个问题中给出的所有 3 个答案:

Global decimal rounding options in Django

但没有一个奏效。例如,使用第二个解决方案中给出的 apps.py 方法 - 我已确认 Decimal 的上下文已通过调用

decimal.getcontext()

设置后立即

decimal.getcontext().rounding = decimal.ROUND_HALF_UP

然后我可以通过进入 Django shell 并调用来确认这一点

import decimal
decimal.getcontext()

报告四舍五入=ROUND_HALF_UP

但是,如果我再打电话

decimal.getcontext()

在模型的保存方法中,舍入选项已恢复为 ROUND_HALF_EVEN - 这向我暗示存在不止一个上下文?

我想了解是否可以将 decimal 全局设置为 ROUND_HALF_UP,如果可以,我的代码哪里出错了?

我目前正在 django 开发服务器上运行该应用程序并使用 Python 3.6.4

最佳答案

getcontext 仅适用于当前线程,不会在执行 View 时调用。相反,您应该设置 DefaultContext在应用程序配置或您的 settings.py 中。所有其他线程将自动继承此上下文。

例如,在settings.py中添加:

DefaultContext.rounding=ROUND_HALF_UP

关于python - 在 Django 中全局设置 Decimal 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560034/

相关文章:

django - 重命名 Django 迁移文件是否安全?

python - 从base64代码保存图片

javascript - 日期选择器未定义 - jQuery

python - 如何解决 django 的 send_mail 无法访问网络的问题?

python - 如何选择网站中除给定类别之外的所有 URL?

python - 返回 OSError 异常类的子类实例的逻辑在哪里?

python - 删除不在 Python 集合中的字符

python - Django Querysets 什么时候在 View 中执行?

python - golang 中的原始 http 响应

python - 如何使用Python计算并找到图像中对象区域的分布?