0

2 つのテーブル間の関連関係を作成しようとしていintakeますmodule。各インテークは、モジュールと 1 対多の関係にあります。ただし、各モジュールにはコースワークが割り当てられており、各コースワークにはduedate各インテークに固有の があります。

私はこれを試しましたが、うまくいきませんでした:

intake_modules_table = Table('tg_intakemodules',metadata,
   Column('intake_id',Integer,ForeignKey('tg_intake.intake_id',
                onupdate="CASCADE",ondelete="CASCADE")),
   Column('module_id',Integer,ForeignKey('tg_module.module_id',
                onupdate ="CASCADE",ondelete="CASCADE")),
   Column('dueddate', Unicode(16))
)

class Intake(DeclarativeBase):

    __tablename__ = 'tg_intake'

    #{ Columns
    intake_id = Column(Integer, autoincrement=True, primary_key=True)
    code = Column(Unicode(16))
    commencement = Column(DateTime)
    completion = Column(DateTime)

    #{ Special methods
    def __repr__(self):
        return '"%s"' %self.code
    def __unicode__(self):
        return self.code
    #}


class Module(DeclarativeBase):

    __tablename__ ='tg_module'

    #{ Columns
    module_id = Column(Integer, autoincrement=True, primary_key=True)
    code = Column(Unicode(16))
    title = Column(Unicode(30))

    #{ relations
    intakes = relation('Intake', 
        secondary=intake_modules_table, backref='modules')

    #{ Special methods
    def __repr__(self):
        return '"%s"'%self.title
    def __unicode__(self):
        return '"%s"'%self.title
    #}

duedateこれを行うと、で指定された列intake_module_tableが作成されません。ここでいくつかの助けをいただければ幸いです。

前もって感謝します

4

1 に答える 1

0

実際には列duedate 作成されますが、モデルを照会するときにモデル属性として取得されません。intake_modules_tableテーブルの中間モデルを定義し、代わりにそれとの関係を設定する必要がありますIntake。確かに、リレーションの列へのアクセスは少し長くなります ( module.infakes[0].duedate, module.infakes[0].infake.code)。Infakeまた、現在と同じ方法でオブジェクトのリストにアクセスするようにアソシエーション プロキシを設定することもできます。

于 2009-12-22T20:00:23.927 に答える