Как создать класс Elixir, который имеет отношения ManyToMany с самим собой - PullRequest
1 голос
/ 22 июля 2011

Мне трудно обдумать это, но в основном я хочу создать класс Elixir под названием Assets, который может иметь много активов.Итак, это может выглядеть примерно так (но это, очевидно, не работает):

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

Итак, я бы хотел иметь «плоскую» систему активов, но яне уверен, что это возможно или даже лучше.

Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Я не разбираюсь в 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)

Обратите внимание, что поля manager и manager _id «заштрихованы», потому что вы не можете создавать собственные ссылки внутри классаопределение.

1 голос
/ 22 июля 2011

Я понял это благодаря некоторому пониманию @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]

И это работает. Я люблю это!

...