我将模型声明为:
class SAProduct(Base):
sku = Column(PRODUCT_SKU_TYPE, primary_key=True)
i_want_to_hide = Column(String(20), nullable=False)
name = Column(Unicode(255), nullable=True)
@property
def my_property(self):
return i_calculate_property_here(self)
和Spyne模型声明为:
db = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=db)
class TableModel(ComplexModelBase):
__metaclass__ = ComplexModelMeta
__metadata__ = MetaData(bind=db)
class SProduct(TableModel):
__table__ = SAProduct.__table__
如何将属性i_want_to_hide
从Spyne模型中排除,将属性my_property
作为Spyne模型属性包含在内?
P.S。 现在我使用猴子修补Spyne来支持这种语法:
class SProduct(GComplexModel):
__model__ = Product
class Attributes:
exclude_attrs = ('i_want_to_hide',)
add_attrs = {'my_property': Boolean}
但我想摆脱它。
答案 0 :(得分:1)
这并不能直接回答您的问题,但请考虑以下代码:
from spyne import *
TableModel = TTableModel()
class SomeClass(TableModel):
__tablename__ = 'some_table'
id = Integer(pk=True)
s = Unicode
i = Integer(exc_table=True)
此处,pk
代表主键(如果您愿意,可以使用长格式primary_key
),SqlAlchemy只会忽略i
属性。例如它不会在表格中创建,它不会被SqlAlchemy的元类等装备。
对于将从Spyne的RPC部件隐藏的属性,而不是来自SqlAlchemy的属性,这是2.12中的新功能。
你可以说例如:
i = Integer(exc_table=True, pa={JsonObject: dict(exc=true)})
其中pa
代表协议属性。 (如果愿意,可以使用长格式prot_attrs
)每个继承JsonObject的协议都会忽略i
。
如果您不想在wsdl上使用它,您必须这样做:
i = Integer(exc_table=True, exc_interface=True)
与SqlAlchemy相比,Spyne提供了更丰富的对象模型界面。尝试复制此功能而不添加Spyne作为依赖项意味着您必须复制项目中Spyne中完成的所有工作。这是你的选择!