2012-01-25 5 views
3

Djangoでは、サイトのベースURLである "base_url"フィールドを含む私のサイトモデルがあります。私はこのようなオブジェクトを持っています:Djangoクエリ:フィールドは部分文字列

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

私はこのURLを持つサイトオブジェクトを取得したいと思います。私はこのようなdjangoのクエリを実行したいと思います:

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

このクエリはどのように実行できますか? ありがとう

編集: それはBASE_URLのパターンを存在しない、私のfooサイトを指定できます

DjangoのORMによって提供されていませんが、あなたは説明 whereのparamを使用することができます何がしたい
foo = Site(base_url="http://foo.com/base/url/") 
+2

"base_url__contains"または "base_url__icontains"をお探しですか? – Jingo

答えて

3

reference for 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] 

これはもちろん、巨大なデータセットのための理想的ではありません。

+0

答えには大変感謝しています! – Griffosx

+0

私はデザインを変更しようとしていましたが、解決策が存在するかどうかを知りたいと思っていました。 – Griffosx

+0

extraは推奨されなくなりましたので、余分なものやRawを使わないでクエリを書く方法があります。 Fオブジェクトの使用はどうですか?と注釈? – nnm

関連する問題