qobjectの作成用のモジュール書いてみた。
暑くてまじめに書く気が起きない。ごめんなさい。memo,memo
https://bitbucket.org/podhmo/po-django-qutil/src
普通のqobject
Q(foo="bar") & (boo=True)
という感じに作成して、比較したい値が決めた状態で作ってしまう。
ついでに,djangoのキーをつなげる演算の書き方書きにくい。
AnyModel.objects.filter(foo__bar__baz="hoooo-hoo")
LazyQ
lazyQというものを作った。
q = LazyQFragment() q.foo.bar.baz("hooo-hoo") # == Q(foo__bar__baz="hooo-hoo") query = q.foo.bar.baz query("foo") query("bar") #うれしいのは、検索する文字列を変えられる点。
ついでにandとかでつなぎ合わせられると便利。
qmaker
# -*- coding:utf-8 -*- from po.django.q import qmaker qm, q = qmaker() ## ruby, python, jsのなかに検索したものが含まれているものか調べる。 qm.app = q.ruby.contains.or_(q.python.contains.or_(q.js.contains)) # print qm(dict(app="gisty")) # (AND: (OR: ('ruby__contains', 'gisty'), ('python__contains', 'gisty'), ('js__contains', 'gisty'))) ## qm, q = qmaker() qm.baz = q.foo.bar.baz.and_(q.foo.baz.and_(q.baz)) ## qm, q = qmaker() qm.foo = q.one(invert=True).nand_(q.two(translate=lambda x : 3))