在 Django 开发过程中,偶尔会遇到这样的报错:
FieldError: Cannot resolve keyword 'sys_mes_publish_date_gte' into field.
这通常是因为在构建 QuerySet 过滤器时,字段名与查找类型之间的分隔符写错了。Django ORM 对查询条件的语法有严格要求,必须使用双下划线来连接字段名和查找器。
比如你想按发布时间大于等于某个时间筛选消息,正确的写法应该是:
Message.objects.filter(sys_mes_publish_date__gte='2023-01-01')
注意这里用的是 __gte 而不是 _gte。单下划线会被 Django 视为字段的一部分,导致它试图寻找一个名为 sys_mes_publish_date_gte 的实际数据库字段或模型属性,而该字段并不存在,从而抛出异常。
类似的查找方式还有 __lte(小于等于)、__gt(大于)、__lt(小于)等,记住中间的双下划线是关键。遇到这类报错时,检查一下 filter 参数里的下划线数量就能快速解决。

