在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/")
答案 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]
虽然这对于大型数据集来说当然不是理想的。