[SQLObject] 外部キーを検索条件にするときは、「キーID」を使用する。

環境

この記事の内容は、SQLObject 0.9で確認しました。

問題点

次のようなモデルがあるとします。

from sqlobject import *

class Parent(SQLObject):
    children = MultipleJoin('Child')
    
class Child(SQLObject):
    parent = ForeignKey('Parent')

ここで、Parentのidが1であるChildオブジェクトを検索しようとして、

a = Child.select(Child.q.parent==1)

とすると、以下のエラーになります。

/usr/lib/python2.4/site-packages/SQLObject-0.9dev_r2169-py2.4.egg/sqlobject/sqlbuilder.py in __getattr__(self, attr)
    375             return self.FieldClass(self.tableName, self.soClass.sqlmeta.idName, attr)
    376         elif attr not in self.soClass.sqlmeta.columns:
    • > 377 raise AttributeError("%s instance has no attribute '%s'" % (self.soClass.__name__, attr))
378 else: 379 column = self.soClass.sqlmeta.columns[attr] AttributeError: Child instance has no attribute 'parent'

解決方法

"parent"ではなく、"parentID"を使用します。

a = Child.select(Child.q.parentID==1)