2011-07-21 132 views
1

我在思考这个问题时遇到了困难,但基本上我想创建一个名为Assets的Elixir类,它可以拥有多个Assets。因此,它可能看起来像这样(但不工作,很明显):如何创建一个与自己有ManyToMany关系的Elixir类

class Asset(Entity): 
    has_field('Name', Unicode) 
    has_many('Assets', of_kind='Asset', inverse='Assets') 

所以,我希望能够有资产的“平”系统,但我不知道它可能甚至最好。

有没有办法做到这一点?

回答

1

我明白了,谢谢@wberry的一些见解。在药剂:

class Asset(Entity): 
    has_field('Name', Unicode) 
    Assets = ManyToMany('Asset') 

利用这一点,我可以做疯狂的事情是这样的:

a1 = Asset(Name=u'Asset 1') 
a2 = Asset(Name=u'Asset 2') 
a3 = Asset(Name=u'Asset 3') 

a1.Assets=[a1,a2,a3] 

和它的作品。我喜欢它!

+0

很高兴为您服务。 Elixir语法看起来很干净,我必须仔细研究它。 – wberry

+0

这是疯狂的干净的,如果你遇到了它的限制,你几乎可以开始编写sqlalchemy,而你正处于隐藏状态。 – MFB

2

我不懂Elixir,但这是如何使用SQLAlchemy声明来完成的。希望Elixir的定义可以相似,这对你有帮助。

from sqlalchemy.ext.declarative import declarative_base 
Base = declarative_base() 

class Employee(Base): 
    __tablename__ = 'employee' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(64), nullable=False) 
Employee.manager_id = Column(Integer, ForeignKey(Employee.id)) 
Employee.manager = relationship(Employee, backref='subordinates', 
    remote_side=Employee.id) 

注意,managermanager _id字段是“猴子打补丁”,因为你不能在一个类定义内作出自我引用。

+0

谢谢你,这使我找到了解决办法! – MFB

+1

你介意与他人分享你的解决方案吗?作为单独的答案发布并接受它。并且提出导致解决方案的答案也是一个好主意。 – van

+0

是的,去了岗位答案,但不能由于时间的限制。现在做 – MFB

相关问题