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 中,对相关模型的字段进行筛选时,需要使用双下划线(__
)来遍历关系。
解决方案:
-
检查模型关系: 确保你的模型有一个外键或多对多字段指向相关模型(例如
Customer
)。 -
修正筛选语法: 使用相关模型的字段名后跟目标字段和查找条件。
示例:
如果模型如下:
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 中筛选相关模型的字段时,始终使用 相关模型__字段__查找条件
的格式。