在 Django clean 方法之后但在提交之前会发生什么?

What happens after Django clean method but before commit?

我正在使用一个很棒的库,叫做 Django Auditlog。它跟踪对象发生的变化。对于模型书,如果我将作者姓名从 'John' 更改为 'Mary',它会记录之前的值 (John)、之后的值 (Mary)、发生时间以及进行更改的用户。

它工作正常,除了它正在检测我的一些小数字段没有变化的变化。它认为每当我保存此模型时都会发生变化:它认为我从 .00 开始并将其更改为 .0。但是 .00 是现有值,我没有做任何更改。我刚刚保存了()记录。

我在 clean() 方法中检查了表单本身的输出:

services_sub_total
44.00
sum_payments
33.00

然后在数据库中:

我只是想不通 where/why 这是在小数位只检测到一个零 - 我在任何地方都没有看到 .0。所以我想知道 clean() 方法和可能将 .00 截断为 .0 的提交之间发生了什么,Auditlog 可能错误地检测到更改?

如果你向上看 source you would see that it compares these two values not as field values but through use of smart_text values are converted to string inside get_field_value

所以它基本上比较“44.00”和你的值“44.0”,这是不同的字符串,所以它被触发为变化

不确定这是否是设计使然,因为在我看来这会被视为错误,您可以自己分叉并修复它