Запрос Django: поле является подстрокой - PullRequest
3 голосов
/ 25 января 2012

В Django у меня есть модель Site, которая содержит поле "base_url", которое является базовым URL сайта У меня есть такой объект:

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

Я получаю URL и хочу получить объект сайта с таким URL. Я хотел бы выполнить запрос в Django, как это:

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

Как я могу выполнить этот запрос? Thanx

редактирование: Для base_url не существует шаблона, мой сайт foo может быть:

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

1 Ответ

3 голосов
/ 25 января 2012

То, что вы хотите, не предоставляется Django ORM, но вы можете использовать параметр where, описанный в справочнике для QuerySet :

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]

хотя это, конечно, не идеально для больших массивов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...