我在DB中有一个文本字段(Django),用于输入金额
amount = models.TextField(null=True, blank=True)
SQL查询
select id, amount from payment order by amount asc;
id | amount |
-------+---------+
12359 | 1111111 | ----> entered as "1111111" i.e a string value
12360 | 122222 |
12342 | 20 |
12361 | 222222 |
12364 | 2222222 |
12362 | 2222222 |
12290 | 260.00 |
12291 | 260.00 |
12292 | 260.00 |
12336 | 32 |
12363 | 3333333 |
12337 | 355 |
12331 | 45 |
12341 | 740 |
12343 | 741 |
问题-订购未按预期工作。
是否为预期行为?
4条答案
按热度按时间vom3gejh1#
当你使用字符串时,排序是基于ASCII的系统。为了缓解这类问题,最好使用
models.DecimalField
。更多信息请点击此处:https://docs.djangoproject.com/en/4.1/ref/models/fields/#decimalfield
ttvkxqim2#
金额字段应为数值字段而不是***文本字段***。然后排序将生效。
然后请运行迁移。
sqougxex3#
尝试以下方法之一:
我希望能帮助你。但是我不明白你为什么要在文本或varchar中保存你的整数。以后这会给你带来很多问题,空间和速度。
t0ybt7op4#
您可以将值
Cast
为浮点字段并按其排序:但是,正如@IqbalHussain在回答中提到的那样,最好改变模式。