Django: 过滤包含正则表达式字段的模型

14 投票
1 回答
27228 浏览
提问于 2025-04-18 14:48

我有一个字段用来存储正则表达式(REGEX)模式,现在我想通过一个叫做hostname的变量来过滤模型中的数据。(比如:这里我直接把正则表达式写死了。)

Sys_team.objects.filter(hostname= r'^.*\.amgr\..*')

但是我遇到了这个错误:

FieldError: 无法将关键字 'hostname' 解析为字段。可选项有:alert, id, pattern, pub_date, sys_team

hostname的格式是:xxx.amgr.xxx

这是不是意味着在过滤器的左边只能放字段?如果是这样的话,有没有其他方法可以用正则表达式在左边进行比较?再强调一下,hostname并不是一个字段。

1 个回答

20

使用Django的 __contains 方法。

所以对于你的查询:

Sys_team.objects.filter(hostname__contains='.amgr.')

__contains 是Django ORM中与SQL的 LIKE 关键字相对应的功能。

这里有相关文档:

https://docs.djangoproject.com/en/dev/topics/db/queries/#escaping-percent-signs-and-underscores-in-like-statements

撰写回答