Я хотел бы создать связь между объектом Dataset и всеми объектами Category через таблицу аннотаций.
Набор данных содержит коллекцию аннотаций. Каждая аннотация имеет одну категорию. Я хочу, чтобы Dataset.categories содержал уникальный набор категорий, состоящий из всех категорий всех аннотаций в этом экземпляре набора данных. Я пытался сделать это с двойной таблицей ассоциации (dataset_categories
), но это не работает. Как правильно это сделать? Вот мой код:
Base = declarative_base()
dataset_categories = Table('dataset_categories', Base.metadata,
Column('dataset_id', Integer, ForeignKey('datasets.id')),
Column('annotation_id', Integer, ForeignKey('annotations.id')),
Column('category_id', Integer, ForeignKey('categories.id')))
class Dataset(Base):
__tablename__ = 'datasets'
id = Column(Integer, primary_key=True)
annotations = relationship("Annotation")
categories = relationship("Category", secondary=dataset_categories)
class Annotation(Base):
__tablename__ = 'annotations'
id = Column(Integer, primary_key=True)
category_id = Column(Integer, ForeignKey('categories.id'), nullable=False)
category = relationship("Category")
dataset_id = Column(Integer, ForeignKey('datasets.id'))
class Category(Base):
__tablename__ = 'categories'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False, unique=True)
dataset = relationship("Dataset", secondary=dataset_categories)
dataset_id = Column(Integer, ForeignKey('datasets.id'),
back_populates='categories')