0

我正在尝试在声明性类模型中混合使用同义词。

class MyMixin(object):

    __my_field = Column(Boolean, name='my_field', index=True, default=True)

    def __get_my_field(self):
        return self.__my_field

    @declared_attr
    def my_field(cls):  # @NoSelf
        return synonym('__my_field', descriptor=property(cls.__get_my_field))    


Base = declarative_base(cls=MyMixin)


class Model(Base):

    __tablename__ = 'model'

    value = Column(String)

代码可以正常启动,但每当我尝试查询该字段 ( session.query(Model).filter(Model.my_field==True)) 时,都会出现最大递归错误。

我已经尝试过其他问题中建议的解决方案,但我得到的只是最大递归超出错误。

4

1 回答 1

2

Python 将名称修饰应用于以双下划线开头的类属性,我强烈怀疑这是您问题的根源。

从列声明中删除一个下划线:

class MyMixin(object):

    __my_field = Column(Boolean, name='my_field', index=True, default=True)

    def _get_my_field(self):
        return self._my_field

    @declared_attr
    def my_field(cls):  # @NoSelf
        return synonym('_my_field', descriptor=property(cls._get_my_field))    
于 2012-11-13T16:07:31.933 回答