先说结论:
# 假设 JsonField 名称为 data,内容为 {"info": {"path": "我的资源创建"}}
qs = qs.filter(data__filter={"info.path": "我的资源创建"})
我查看了 tortoise-orm 官方文档,没有这方面讲述。
问了 gpt4o,一直在两个错误答案之间左右横跳。
bing搜索,只找到一个使用 CustomFunction 派生类的解决方法。
最后自己看源码,发现 contrib.mysql.json_functions 内有实现,实现为自定义 operator,使用方法在 tortoise.filters.get_json_filter() 函数内定义:f"{field_name}__filter"
试验了下列调用方式:
qs.filter(data__filter={"key": "$.info.path", "value": "我的资源创建"}) # ((key, filter_value),) = value.items() 运行错误
qs.filter(data__filter={"$.info.path": "我的资源创建"}) # 使用 str(qs.query) 发现多了一个 "$."
最后试出了上面最终的表达式