diff --git a/tagstudio/src/core/library/alchemy/library.py b/tagstudio/src/core/library/alchemy/library.py index 3c13c639e..6017f436e 100644 --- a/tagstudio/src/core/library/alchemy/library.py +++ b/tagstudio/src/core/library/alchemy/library.py @@ -490,8 +490,7 @@ def search_tags( with Session(self.engine) as session: query = select(Tag) query = query.options( - selectinload(Tag.subtags), - selectinload(Tag.aliases), + selectinload(Tag.subtags), selectinload(Tag.aliases), selectinload(Tag.parent_tags) ) if search.tag: @@ -513,7 +512,6 @@ def search_tags( results=len(res), ) - session.expunge_all() return res def get_all_child_tag_ids(self, tag_id: int) -> list[int]: diff --git a/tagstudio/src/core/library/alchemy/models.py b/tagstudio/src/core/library/alchemy/models.py index 734c6823f..556dfc43d 100644 --- a/tagstudio/src/core/library/alchemy/models.py +++ b/tagstudio/src/core/library/alchemy/models.py @@ -52,8 +52,8 @@ class Tag(Base): parent_tags: Mapped[set["Tag"]] = relationship( secondary=TagSubtag.__tablename__, - primaryjoin="Tag.id == TagSubtag.child_id", - secondaryjoin="Tag.id == TagSubtag.parent_id", + primaryjoin="Tag.id == TagSubtag.parent_id", + secondaryjoin="Tag.id == TagSubtag.child_id", back_populates="subtags", ) @@ -76,6 +76,25 @@ def alias_strings(self) -> list[str]: def alias_ids(self) -> list[int]: return [tag.id for tag in self.aliases] + @property + def display_name(self) -> str: + if len(self.parent_tags) == 0: + return "" + + parent_tag = list(self.parent_tags)[0] + + if parent_tag is None: + return "" + + display_name = "" + + if parent_tag.shorthand.strip() == "" or parent_tag.shorthand is None: + display_name = " (" + parent_tag.name + ")" + else: + display_name = " (" + parent_tag.shorthand + ")" + + return self.name + display_name + def __init__( self, name: str, diff --git a/tagstudio/src/qt/modals/tag_database.py b/tagstudio/src/qt/modals/tag_database.py index 9375c841b..8bff3f7bd 100644 --- a/tagstudio/src/qt/modals/tag_database.py +++ b/tagstudio/src/qt/modals/tag_database.py @@ -77,7 +77,10 @@ def update_tags(self, query: str | None = None): row = QHBoxLayout(container) row.setContentsMargins(0, 0, 0, 0) row.setSpacing(3) - tag_widget = TagWidget(tag, has_edit=True, has_remove=False) + display_name = tag.display_name + tag_widget = TagWidget( + tag, tag_display_name=display_name, has_edit=True, has_remove=False + ) tag_widget.on_edit.connect(lambda checked=False, t=tag: self.edit_tag(t)) row.addWidget(tag_widget) self.scroll_layout.addWidget(container) diff --git a/tagstudio/src/qt/widgets/tag.py b/tagstudio/src/qt/widgets/tag.py index 2d4cc7ce1..4f279617f 100644 --- a/tagstudio/src/qt/widgets/tag.py +++ b/tagstudio/src/qt/widgets/tag.py @@ -105,6 +105,7 @@ def __init__( tag: Tag, has_edit: bool, has_remove: bool, + tag_display_name: str = None, on_remove_callback: FunctionType = None, on_click_callback: FunctionType = None, on_edit_callback: FunctionType = None, @@ -124,7 +125,7 @@ def __init__( self.bg_button = QPushButton(self) self.bg_button.setFlat(True) - self.bg_button.setText(tag.name) + self.bg_button.setText(tag_display_name or tag.name) if has_edit: edit_action = QAction("Edit", self) edit_action.triggered.connect(on_edit_callback)