【问题标题】:How to create an Elixir class that has a ManyToMany relationship with itself如何创建一个与其自身具有多对多关系的 Elixir 类
【发布时间】:2011-10-10 14:25:39
【问题描述】:

我在考虑这个问题时遇到了麻烦,但基本上我想创建一个名为 Assets 的 Elixir 类,它可以有很多 Assets。所以,它可能看起来像这样(但这显然不起作用):

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

所以,我希望能够拥有一个“扁平”的资产系统,但我不确定它是否可行,甚至是最好的。

有没有办法做到这一点?

【问题讨论】:

    标签: python sqlalchemy python-elixir


    【解决方案1】:

    我对 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 字段是“猴子补丁”,因为您不能在类定义中进行自引用。

    【讨论】:

    • 谢谢你,这让我找到了解决方案!
    • 您介意与他人分享您的解决方案吗?作为单独的答案发布并接受。并且支持导致解决方案的答案也是一个好主意。
    • 是的,去发布答案但由于时间限制无法发布。现在做
    • 现在我必须等到明天才能接受我自己的答案;-)
    • @MFB:如果这个答案对你有帮助,你会为自己赢得声誉,如果你选择这个答案,你也会用自己的声誉帮助 wberry。如果没有人回答帮助您找到解决方案,您真的应该只接受您自己的回答。
    【解决方案2】:

    感谢@wberry 的一些见解,我想通了。在 Elixir 中:

    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]
    

    而且它有效。我喜欢它!

    【讨论】:

    • 很高兴为您服务。 Elixir 的语法看起来很干净,我得研究一下。
    • 它非常干净,如果你遇到了限制,你几乎可以开始编写 sqlalchemy 并且你在引擎盖下。
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多