diff --git a/jdhapi/admin.py b/jdhapi/admin.py index 210ef40..fa0fc77 100644 --- a/jdhapi/admin.py +++ b/jdhapi/admin.py @@ -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 @@ -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 = ( ( diff --git a/jdhapi/filter/issuenamepidfilter.py b/jdhapi/filter/issuenamepidfilter.py new file mode 100644 index 0000000..3194e2d --- /dev/null +++ b/jdhapi/filter/issuenamepidfilter.py @@ -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 \ No newline at end of file