Skip to content

Commit 2181a42

Browse files
committed
Add an orphaned queryset method to Tags
1 parent 5004696 commit 2181a42

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

CHANGELOG.rst

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Changelog
44
(Unreleased)
55
~~~~~~~~~~~~
66

7+
* Add an admin command to remove orphaned tags
8+
79
6.1.0 (2024-09-29)
810
~~~~~~~~~~~~~~~~~~
911

taggit/admin.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def merge_tags_view(self, request):
8888
@admin.action(description="Remove orphaned tags")
8989
def remove_orphaned_tags_action(self, request, queryset):
9090
try:
91-
orphaned_tags = Tag.objects.filter(taggit_taggeditem_items=None)
91+
orphaned_tags = queryset.objects.orphaned()
9292
count, _ = orphaned_tags.delete()
9393
self.message_user(
9494
request, f"Successfully removed {count} orphaned tags.", level="success"

taggit/management/commands/remove_orphaned_tags.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ class Command(BaseCommand):
77
help = "Remove orphaned tags"
88

99
def handle(self, *args, **options):
10-
orphaned_tags = Tag.objects.filter(taggit_taggeditem_items=None)
10+
orphaned_tags = Tag.objects.orphaned()
1111
count = orphaned_tags.delete()
1212
self.stdout.write(f"Successfully removed {count} orphaned tags")

taggit/models.py

+9
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,16 @@ def slugify(self, tag, i=None):
105105
return slug
106106

107107

108+
class TagQuerySet(models.QuerySet):
109+
110+
def orphaned(self):
111+
return self.filter(taggit_taggeditem_items=None)
112+
113+
108114
class Tag(TagBase):
115+
116+
objects = NaturalKeyManager.from_queryset(TagQuerySet)()
117+
109118
class Meta:
110119
verbose_name = _("tag")
111120
verbose_name_plural = _("tags")

0 commit comments

Comments
 (0)