可能是一个不雅观的问题标题,但希望这个框架设置能更清楚地解释问题:
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
class Number(Base):
__tablename__ = 'number'
id = Column(Integer, primary_key=True)
users_id = Column(Integer, ForeignKey('user.id'))
user = relationship('User', backref=backref('numbers'))
value = Column(String)
joe = User(name='Joe')
joe.numbers = [
# Here we need to know that the class we want is named "Number".
# However, in some contexts (think abstract base classes or mixins) we might
# not necessarily know that, or have a way to import/reference it.
Number(value='212-555-1234'),
Number(value='201-555-1111'),
Number(value='917-555-8989')]
基本上有一个User
表,每个User
可以有任意数量的Number
与其关联
是否有一种干净的方法,仅通过User
的属性就可以找到对Number
类的引用(并能够从中创建实例),而无需直接导入Number
?在this question的影响下,我想到的最好的办法是:
from sqlalchemy.orm import object_mapper
number_class = object_mapper(joe).relationships['numbers'].mapper.class_
joe.numbers = [number_class(value='212-555-1234') ...]
。。。但这似乎相当迟钝,我不太喜欢依赖它
我认为能够做到这一点的最有效的原因是在mixin的情况下——如果有一些基类需要能够向用户追加新的数字,而不需要具体知道要使用什么类
有几种方法可以做到这一点,但我认为最简单(而且足够干净)的方法是在用户类上存储您需要的内容,因为您的用户类已经实现绑定到Number类,因为它在创建关系时导入并使用Number。因此,您可以添加一个User.add_number()方法,在该方法中,您可以传递参数来添加数字,然后让它创建数字并存储在self上
相关问题 更多 >
编程相关推荐