Django查询:字段是子字符串

时间:2012-01-25 13:43:49

标签: django django-queryset

在Django中我的站点模型包含字段“base_url”,它是站点的基本URL。我有一个像这样的对象:

foo = Site(base_url="http://foo_base_url.com/")
foo.save()

我收到一个网址,我想获取有此网址的网站对象。我想在django中执行这样的查询:

Site.objects.get(base_url__is_substring="http://foo_base_url.com/something_non_base_url")

如何执行此查询? 感谢名单

编辑: 它不存在base_url的模式,我的foo网站可以是:

foo = Site(base_url="http://foo.com/base/url/")

1 个答案:

答案 0 :(得分:3)

Django ORM不提供您想要的内容,但您可以使用reference for QuerySet下描述的where参数:

url = "http://foo_base_url.com/something_non_base_url"
Site.objects.extra(where=["%s LIKE CONCAT('%%',field,'%%')"], params=[url]).get()

请注意,没有跨DMBS连接的标准方法,因此如果您迁移,则必须迁移此代码。

唯一可移植的方法是使用Python过滤它:

sites = [site for site in Site.objects.all() if site.base_url in url]

虽然这对于大型数据集来说当然不是理想的。