Skip to content

admin

django_spire.knowledge.entry.admin

TAG_ACTION_MAX_ROWS = 25 module-attribute

EntryAdmin

Bases: ModelAdmin

actions = ('set_tags_for_entries',) class-attribute instance-attribute

autocomplete_fields = ('collection', 'current_version') class-attribute instance-attribute

list_display = ('name', 'current_version_link', 'collection', 'is_deleted', 'tag_count') class-attribute instance-attribute

list_filter = ('is_deleted', 'is_active') class-attribute instance-attribute

ordering = ('name',) class-attribute instance-attribute

search_fields = ('name', 'collection__name') class-attribute instance-attribute

Source code in django_spire/knowledge/entry/admin.py
@admin.display(description='Current Version')
def current_version_link(self, entry: Entry) -> str:
    url = admin_changelist_url(EntryVersion, entry_id=str(entry.id))

    return format_html('<a href="{}">View Versions</a>', url)

get_queryset

Source code in django_spire/knowledge/entry/admin.py
def get_queryset(self, request: HttpRequest) -> QuerySet[Entry]:
    queryset = super().get_queryset(request)

    return queryset.annotate(_tag_count=Count('tags', distinct=True))

set_tags_for_entries

Source code in django_spire/knowledge/entry/admin.py
@admin.action(description='Set Tags for Entries (Allow 5 Seconds Per)')
def set_tags_for_entries(self, request: HttpRequest, queryset: QuerySet[Entry]) -> None:
    if queryset.count() > TAG_ACTION_MAX_ROWS:
        message = (
            f'Select at most {TAG_ACTION_MAX_ROWS} entries at a time. '
            f'Tagging runs inline and will time out on larger selections.'
        )

        messages.error(request, message)
        return

    processed = 0

    for entry in queryset:
        entry.services.tag.process_and_set_tags()
        processed += 1

    messages.success(request, f'Successfully processed {processed} entries.')

tag_count

Source code in django_spire/knowledge/entry/admin.py
@admin.display(description='Tags', ordering='_tag_count')
def tag_count(self, entry: Entry) -> int:
    return entry._tag_count