Tortoise ORM的筛选条件

File "C:\Users\xukai\AppData\Local\Programs\Python\Python311\Lib\site-packages\tortoise\expressions.py", line 425, in _get_actual_filter_params
    raise FieldError(f"Unknown filter param '{key}'. Allowed base values are {allowed}")
tortoise.exceptions.FieldError: Unknown filter param 'customer_name__contains'. Allowed base values are ['created_at', 'created_by', 'created_by_id', 'customer', 'customer_id', 'delivery_date', 'details', 'id', 'order_date', 'production_orders', 'status', 'total_amount', 'updated_at']

该错误是因为筛选参数 customer_name__contains 不正确。在 Tortoise ORM 中,对相关模型的字段进行筛选时,需要使用双下划线(__)来遍历关系。

解决方案:

  1. 检查模型关系: 确保你的模型有一个外键或多对多字段指向相关模型(例如 Customer)。

  2. 修正筛选语法: 使用相关模型的字段名后跟目标字段和查找条件。

示例:

如果模型如下:

class Customer(Model):
    name = fields.CharField()

class Order(Model):
    customer = fields.ForeignKeyField('models.Customer')

错误的筛选方式:

Order.filter(customer_name__contains="John")

正确的筛选方式:

Order.filter(customer__name__contains="John")

解释:

  • customer__name 通过 customer 外键遍历到相关 Customer 模型的 name 字段。

  • __contains 是用于查找子字符串的查找条件。

在 Tortoise ORM 中筛选相关模型的字段时,始终使用 相关模型__字段__查找条件 的格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值