我正在使用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
1条答案
按热度按时间s4n0splo1#
我没有足够的代表发表评论,你没有发布你的产品模型,但从你所说的,似乎你的字段 unit_price 在你的产品模型中被定义为decimal,你的数据库被配置为int。如果是这样的话,我只能想到一种可能性:您首先将此字段定义为int,后来更改为decimal,并且没有运行迁移。
要解决这个问题,您需要在虚拟环境中运行这些命令,这样数据库中的字段将更新为十进制类型,您可以正常过滤:
如果不是这种情况,请张贴您的产品型号和您的观点,以帮助确定问题。
编辑(基于您在评论中提供的信息):
要将int转换为decimal,您可以这样做:
但是我真的认为这种方式转换数据可能会在将来给你带来问题,所以最好的做法是规范化这两种类型。假设你希望这个字段是十进制类型,你可以在模型中改变一些东西,比如 max_digits 变量,然后再次运行迁移。这样,数据库中的列将再次设置为十进制。如果你在这样做时出错,您可以尝试删除表中的数据,然后运行迁移。
之后,如果数据是JSON格式的,则可以使用venv中的loaddata命令再次加载数据。