私はDBに多対多の関係を持っています。問題は、フォームを送信すると、多対多の表にデータが格納されないということです。Sqlalchemy多対多DBにデータを追加しない
私のモデルのために私のコードです:
CompanyCategory = Table('CompanyCategory', Base.metadata,
Column('id', Integer, primary_key=True),
Column('categoryId', Integer, ForeignKey('categories.id')),
Column('companyId', Integer, ForeignKey('companies.id')))
class Company(Base):
__tablename__ = 'companies'
id = Column(Integer, primary_key=True)
company_name = Column(Text, nullable=False)
users_id = Column(Integer, ForeignKey('users.id'))
users = relationship("User", backref=backref('users', cascade="all, delete-orphan"),
lazy='joined')
# foreign key for category
addresses_category = relationship('Category', secondary=CompanyCategory, backref='companies')
def __init__(self, company_name=None, users_id=None):
self.company_name = company_name
self.users_id = users_id
def get(self, id):
if self.id == id:
return self
else:
return None
def __repr__(self):
return '<%s(%r, %r, %r)>' % (self.__class__.__name__, self.id, self.company_name, self.users_id)
class Category(Base):
__tablename__ = 'categories'
id = Column(Integer, primary_key=True)
category_name = Column(Text, nullable=False)
addresses_company = relationship('Company', secondary=CompanyCategory, backref='categories')
def __init__(self, category_name=None):
self.category_name = category_name
def get(self, id):
if self.id == id:
return self
else:
return None
def __repr__(self):
return '<%s(%r, %r)>' % (self.__class__.__name__, self.id, self.category_name)
私は2つのクラスCompany
とCategory
を持っています。ある企業は複数のカテゴリを持つことができます(後で私が作成する固定数のカテゴリがあります)。
これを表示するには、単純な多対多の関係CompanyCategory
を作成しました。
私が知る限り、sqlalchemyは、会社とカテゴリの外部キーを自動的に追加する必要があります。
私はDBに会社やカテゴリを追加してい一環である:この場合
new_user_company = Company(company_name=form.company_name.data.strip(), users_id = new_user.id)
if new_user_company:
db_session.add(new_user_company)
db_session.commit()
new_user_company_category = Category(category_name=form.category_name.data)
if new_user_company_category:
db_session.add(new_user_company_category)
db_session.commit()
データは、当社にもカテゴリーに追加されますが、CompanyCategory
にエントリがありません。
私はすでにここでいくつかの解決策を試しましたが、主にフラスコ型のSQL型であり、双方向の動作ではありません。会社が削除された場合、会社が発生する多対多関係のすべてが削除されるため、双方向の動作が必要です。カテゴリが削除される場合(おそらく起こることはありません)、これらのカテゴリが発生した企業との関係はすべて削除する必要があります。 SQLAlchemy ORM tutorialとして
おかげ