Skip to content

Commit

Permalink
addition filter #233
Browse files Browse the repository at this point in the history
  • Loading branch information
eliselavy committed Jul 18, 2024
1 parent d656143 commit a5a113a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
4 changes: 3 additions & 1 deletion jdhapi/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from django.contrib import admin
from django.utils.safestring import mark_safe

from jdhapi.filter.issuenamepidfilter import IssueNamePIDFilter

from .forms import articleForm
from .models import Author, Abstract, Dataset, Article, Issue, Tag, Role, CallOfPaper
from .filter.languagetagfilter import LanguageTagFilter
Expand Down Expand Up @@ -110,7 +112,7 @@ class ArticleAdmin(admin.ModelAdmin):
exclude = ['notebook_commit_hash']
search_fields = ("abstract__title", )
list_display = ['abstract_pid', 'issue_name', 'issue', 'abstract_title', 'status', 'clickable_dataverse_url']
list_filter = ('issue__name', 'status', 'copyright_type', EmptyDataverseURLFilter)
list_filter = (IssueNamePIDFilter, 'status', 'copyright_type', EmptyDataverseURLFilter)
actions = [save_notebook_fingerprint, save_notebook_specific_cell, save_article_citation, save_article_package, save_article_references]
fieldsets = (
(
Expand Down
18 changes: 18 additions & 0 deletions jdhapi/filter/issuenamepidfilter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django.contrib.admin import SimpleListFilter
from django.utils.translation import gettext_lazy as _

class IssueNamePIDFilter(SimpleListFilter):
title = _('Issue by name and PID')
parameter_name = 'issue_by_name_and_pid'

def lookups(self, request, model_admin):
issues = model_admin.model.objects.all().values('issue__name', 'issue__pid')
unique_issues = set((issue['issue__name'], issue['issue__pid']) for issue in issues)
sorted_issues = sorted(unique_issues, key=lambda x: x[0]) # Sort by issue name
return [(f"{name}_{pid}", f"{name} - {pid}") for name, pid in sorted_issues]

def queryset(self, request, queryset):
if self.value():
name, pid = self.value().split('_')
return queryset.filter(issue__name=name, issue__pid=pid)
return queryset

0 comments on commit a5a113a

Please sign in to comment.