Djangoが「Error Binding Parameter 0」とか怒る
くだらないミスなのに、一度ならずも二度も同じエラーにハマったのでメモ。
現象
InterfaceError: Error binding parameter 0 - probably unsupported type.
Djangoがこういうエラーを出すことがあって、意味がわからない。
意味
- そもそもこれはDjangoのエラーではなく、PySQLiteのエラーメッセージ。
- SQLiteに与えたクエリ文字列に、パラメータの位置を示す「?」が含まれていて、かつ、
- 与えられたパラメータが文字列とか数値など適切な型ではない、という意味。
Django的に
Django的には、たとえば、
User.objects.filter(username=user)
などとした時、本当は「user」に文字列を渡さなきゃいけないのに変な物(たとえば自前のオブジェクト)を渡すと、上記のエラーが出ます。
自分の場合
いろいろと訳がありまして。 「TEMPLATE_CONTEXT_PROCESSORS」に、ユーザ認証済みでなければ使えない関数を入れてました。 Djangoの認証ページではRequestContextが使われるため、こんなハメになりました。
(2008/3/25 - sgk)
