|
|
@@ -1,6 +1,7 @@
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
from django import template
|
|
|
+from django.conf import settings
|
|
|
from django.contrib import messages
|
|
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
@@ -9,18 +10,20 @@ from django.http import Http404
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
|
|
from django.utils.safestring import mark_safe
|
|
|
from django.views.generic import View
|
|
|
-from taggit.models import Tag
|
|
|
+from django_tables2 import RequestConfig
|
|
|
+from taggit.models import Tag, TaggedItem
|
|
|
|
|
|
from utilities.forms import ConfirmationForm
|
|
|
+from utilities.paginator import EnhancedPaginator
|
|
|
from utilities.views import BulkDeleteView, BulkEditView, ObjectDeleteView, ObjectEditView, ObjectListView
|
|
|
from . import filters
|
|
|
from .forms import (
|
|
|
ConfigContextForm, ConfigContextBulkEditForm, ConfigContextFilterForm, ImageAttachmentForm, ObjectChangeFilterForm,
|
|
|
- TagForm,
|
|
|
+ TagFilterForm, TagForm,
|
|
|
)
|
|
|
from .models import ConfigContext, ImageAttachment, ObjectChange, ReportResult
|
|
|
from .reports import get_report, get_reports
|
|
|
-from .tables import ConfigContextTable, ObjectChangeTable, TagTable
|
|
|
+from .tables import ConfigContextTable, ObjectChangeTable, TagTable, TaggedItemTable
|
|
|
|
|
|
|
|
|
#
|
|
|
@@ -28,11 +31,45 @@ from .tables import ConfigContextTable, ObjectChangeTable, TagTable
|
|
|
#
|
|
|
|
|
|
class TagListView(ObjectListView):
|
|
|
- queryset = Tag.objects.annotate(items=Count('taggit_taggeditem_items')).order_by('name')
|
|
|
+ queryset = Tag.objects.annotate(
|
|
|
+ items=Count('taggit_taggeditem_items')
|
|
|
+ ).order_by(
|
|
|
+ 'name'
|
|
|
+ )
|
|
|
+ filter = filters.TagFilter
|
|
|
+ filter_form = TagFilterForm
|
|
|
table = TagTable
|
|
|
template_name = 'extras/tag_list.html'
|
|
|
|
|
|
|
|
|
+class TagView(View):
|
|
|
+
|
|
|
+ def get(self, request, slug):
|
|
|
+
|
|
|
+ tag = get_object_or_404(Tag, slug=slug)
|
|
|
+ tagged_items = TaggedItem.objects.filter(
|
|
|
+ tag=tag
|
|
|
+ ).select_related(
|
|
|
+ 'content_type'
|
|
|
+ ).prefetch_related(
|
|
|
+ 'content_object'
|
|
|
+ )
|
|
|
+
|
|
|
+ # Generate a table of all items tagged with this Tag
|
|
|
+ items_table = TaggedItemTable(tagged_items)
|
|
|
+ paginate = {
|
|
|
+ 'klass': EnhancedPaginator,
|
|
|
+ 'per_page': request.GET.get('per_page', settings.PAGINATE_COUNT)
|
|
|
+ }
|
|
|
+ RequestConfig(request, paginate).configure(items_table)
|
|
|
+
|
|
|
+ return render(request, 'extras/tag.html', {
|
|
|
+ 'tag': tag,
|
|
|
+ 'items_count': tagged_items.count(),
|
|
|
+ 'items_table': items_table,
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
class TagEditView(PermissionRequiredMixin, ObjectEditView):
|
|
|
permission_required = 'taggit.change_tag'
|
|
|
model = Tag
|
|
|
@@ -48,7 +85,11 @@ class TagDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
|
|
|
|
|
class TagBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|
|
permission_required = 'circuits.delete_circuittype'
|
|
|
- queryset = Tag.objects.annotate(items=Count('taggit_taggeditem_items')).order_by('name')
|
|
|
+ queryset = Tag.objects.annotate(
|
|
|
+ items=Count('taggit_taggeditem_items')
|
|
|
+ ).order_by(
|
|
|
+ 'name'
|
|
|
+ )
|
|
|
table = TagTable
|
|
|
default_return_url = 'extras:tag_list'
|
|
|
|