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))