mongodb Django Query Decimal type Issue

bis0qfac  于 2023-04-20  发布在  Go
关注(0)|答案(1)|浏览(102)

我正在使用filter query过滤对象。从mongodb中检索数据,其中数据存储为类型“int32”。
使用以下命令过滤对象时:

query_product = Product.objects.filter(unit_price__lt=30)

它抛出一个错误:

我知道这是导致我的错误,因为使用过滤器时,我查询字符串元素,它是工作正常。
我是django的新手。请帮助我如何避免这个错误。
我已经尝试了python int函数将30转换为int,但我认为django仍然将其处理为十进制。
数据库端unit_price的数据类型. unit_price datatype Image

s4n0splo

s4n0splo1#

我没有足够的代表发表评论,你没有发布你的产品模型,但从你所说的,似乎你的字段 unit_price 在你的产品模型中被定义为decimal,你的数据库被配置为int。如果是这样的话,我只能想到一种可能性:您首先将此字段定义为int,后来更改为decimal,并且没有运行迁移。
要解决这个问题,您需要在虚拟环境中运行这些命令,这样数据库中的字段将更新为十进制类型,您可以正常过滤:

python manage.py makemigrations
python manage.py migrate

如果不是这种情况,请张贴您的产品型号和您的观点,以帮助确定问题。

编辑(基于您在评论中提供的信息):

要将int转换为decimal,您可以这样做:

from decimal import Decimal

my_int_var = 50
my_int_converted = Decimal(my_int_var)

但是我真的认为这种方式转换数据可能会在将来给你带来问题,所以最好的做法是规范化这两种类型。假设你希望这个字段是十进制类型,你可以在模型中改变一些东西,比如 max_digits 变量,然后再次运行迁移。这样,数据库中的列将再次设置为十进制。如果你在这样做时出错,您可以尝试删除表中的数据,然后运行迁移。
之后,如果数据是JSON格式的,则可以使用venv中的loaddata命令再次加载数据。

相关问题