2012年3月26日月曜日

djangoのrawでSQL実行したときにpaginationで困るのを解決

こういう時代ですけど、SQL書かないとって時ありますよね。
Djangoの場合だと、ModelName.objects.raw(SQL文) 的なメソッドが使えます。

まあ、この辺に書いてありますよね。使えるのは、Django1.2以降です。
https://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-queries

通常Djangoで ModelName.objects.all() と .filter() とか使うと
QuerySetって人が返ってきますが、この場合は、RawQuerySet という人が返ってきます。
ちょっと困ったことになるのが、
PaginationしたいときにRawQuerySetにcountメソッドがないとか言い出すあたりです。
そんなときはとりあえず、listメソッドでlistにしちゃいましょう。
テンプレでforでまわして値表示するくらいなら困らないです。

products = Product.objects.raw("SELECT * FROM product_product")
products = list(products)

まあ、これでいいんじゃないかな。

0 件のコメント:

コメントを投稿