From f888415d6ba4ef9326f9c59fed82468ede41f418 Mon Sep 17 00:00:00 2001 From: Sergei <454004@mail.ru> Date: Fri, 3 Nov 2023 08:19:21 +0500 Subject: [PATCH 1/3] [#266] Add issue filtering by status Add issue filtering by status to view issues. Rename the page title "Open Issues" to "Issues". Update navigation. --- contributors/views/filters.py | 18 ++++++++++++++++-- contributors/views/issues.py | 6 +++--- templates/components/issues_filter.html | 3 +++ templates/components/navbar.html | 2 +- templates/open_issues.html | 6 +++--- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/contributors/views/filters.py b/contributors/views/filters.py index 448af48c..d616a1e7 100644 --- a/contributors/views/filters.py +++ b/contributors/views/filters.py @@ -5,9 +5,14 @@ from contributors.models import Contribution, ContributionLabel +STATE_CHOICES = ( + ('open', _('Open')), + ('closed', _('Closed')), +) + class IssuesFilter(django_filters.FilterSet): - """Open issues filter.""" + """Issues filter.""" info_title = django_filters.CharFilter( field_name='info__title', @@ -27,6 +32,14 @@ class IssuesFilter(django_filters.FilterSet): label='', widget=TextInput(attrs={'placeholder': _('Language')}), ) + info_state = django_filters.ChoiceFilter( + choices=STATE_CHOICES, + lookup_expr='icontains', + field_name='info__state', + label='', + empty_label=_('All'), + ) + good_first_issue_filter = django_filters.BooleanFilter( field_name='good_first_issue', method='get_good_first_issue', @@ -40,10 +53,11 @@ class Meta: # noqa: WPS306 'info_title', 'repository_full_name', 'repository_labels', + 'info_state', ] def get_good_first_issue(self, queryset, name, value): # noqa: WPS110 - """Filter open issues by label 'good_first_issue'.""" + """Filter issues by label 'good_first_issue'.""" good_first = ContributionLabel.objects.filter( name='good first issue', ).first() diff --git a/contributors/views/issues.py b/contributors/views/issues.py index bf23d6d1..05ee3c5b 100644 --- a/contributors/views/issues.py +++ b/contributors/views/issues.py @@ -14,7 +14,7 @@ class ListView( TableSortSearchAndPaginationMixin, FilterView, ): - """A list of opened issues.""" + """A list of issues.""" template_name = 'open_issues.html' filterset_class = IssuesFilter @@ -39,7 +39,7 @@ class ListView( ) queryset = ( - Contribution.objects.filter(type='iss', info__state='open'). + Contribution.objects.filter(type='iss'). select_related('repository', 'contributor', 'info'). prefetch_related("repository__labels", contributionlabel_prefetch). distinct() @@ -48,7 +48,7 @@ class ListView( def get_context_data(self, *args, **kwargs): """Add context.""" all_contribution_id = Contribution.objects.filter( - type='iss', info__state='open', + type='iss' ).values_list('id', flat=True).distinct() all_contribution_labels = ContributionLabel.objects.filter( contribution__id__in=all_contribution_id, diff --git a/templates/components/issues_filter.html b/templates/components/issues_filter.html index 8f195dc6..cfd2bd50 100644 --- a/templates/components/issues_filter.html +++ b/templates/components/issues_filter.html @@ -13,6 +13,9 @@
{{ filter.form.repository_labels|as_crispy_field }}
+
+ {{ filter.form.info_state|as_crispy_field }} +
{{ filter.form.good_first_issue_filter|as_crispy_field }}
diff --git a/templates/components/navbar.html b/templates/components/navbar.html index 3f17a174..30b9d11f 100644 --- a/templates/components/navbar.html +++ b/templates/components/navbar.html @@ -40,7 +40,7 @@