Source code for eucrim.news.filters

# SPDX-FileCopyrightText: 2024 Thomas Breitner <t.breitner@csl.mpg.de>
#
# SPDX-License-Identifier: EUPL-1.2

from django import forms
import django_filters

# from eucrim.core.widgets import DropdownLinkWidget
from eucrim.core.models.categories import (
    CategoryRegion,
    CategoryAreasCrime,
    CategoryFoundation,
    CategoryCooperation,
    CategoryInstitution,
    CategoryProceduralCriminalLaw,
)
from .models import NewsPage


# Reference:
# https://github.com/carltongibson/django-filter/pull/134#issuecomment-284067570
# http://stackoverflow.com/questions/43916673

# class LanguageWidget(DropdownLinkWidget):
#     label = 'Language'
#     right = True
#
#
# class NewsTypeWidget(DropdownLinkWidget):
#     label = 'Type'
#     right = True
#
#
# class RegionWidget(DropdownLinkWidget):
#     label = 'Region'
#     right = False
#
#
# class FoundationWidget(DropdownLinkWidget):
#     label = 'Foundation'
#     right = False
#
#
# class InstitutionWidget(DropdownLinkWidget):
#     label = 'Institution'
#     right = False
#
#
# class CooperationWidget(DropdownLinkWidget):
#     label = 'Cooperation'
#     right = False
#
#
# class ProceduralWidget(DropdownLinkWidget):
#     label = 'Procedural Criminal Law'
#     right = False
#
#
# class AreaCrimeWidget(DropdownLinkWidget):
#     label = 'Specific Areas of Crime'
#     right = False


[docs] class NewsFilter(django_filters.FilterSet): # news_type = django_filters.ChoiceFilter( # choices=NewsPage.NEWS_TYPE_CHOICES, # widget=NewsTypeWidget, # ) # language = django_filters.ChoiceFilter( # choices=NewsPage.LANGUAGE_CHOICES, # widget=LanguageWidget, # ) # categories_institution = django_filters.AllValuesFilter( # name="categories_institution__title", # widget=InstitutionWidget, # ) # categories_region = django_filters.AllValuesFilter( # name="categories_region__title", # widget=RegionWidget, # ) # categories_foundation = django_filters.AllValuesFilter( # name="categories_foundation__title", # widget=FoundationWidget, # ) # categories_cooperation = django_filters.AllValuesFilter( # name="categories_cooperation__title", # widget=CooperationWidget, # ) # categories_areacrime = django_filters.AllValuesFilter( # name="categories_areacrime__title", # widget=AreaCrimeWidget, # ) # categories_procedural = django_filters.AllValuesFilter( # name="categories_procedural__title", # widget=ProceduralWidget, # ) # categories_region = django_filters.ModelMultipleChoiceFilter( # label="bla", # to_field_name='slug', # queryset=CategoryRegion.objects.all(), # widget=LinkWidget(), # ) is_featured_news = django_filters.BooleanFilter( # widget=forms.CheckboxInput, # field_name='is_featured_news', # lookup_expr='isnull', ) news_type = django_filters.MultipleChoiceFilter( choices=NewsPage.NEWS_TYPE_CHOICES, widget=forms.CheckboxSelectMultiple, ) # language = django_filters.MultipleChoiceFilter( # choices=NewsPage.LANGUAGE_CHOICES, # widget=forms.CheckboxSelectMultiple, # ) categories_region = django_filters.ModelMultipleChoiceFilter( queryset=CategoryRegion.objects.all(), widget=forms.CheckboxSelectMultiple, ) categories_institution = django_filters.ModelMultipleChoiceFilter( queryset=CategoryInstitution.objects.all(), widget=forms.CheckboxSelectMultiple, ) categories_foundation = django_filters.ModelMultipleChoiceFilter( queryset=CategoryFoundation.objects.all(), widget=forms.CheckboxSelectMultiple, ) categories_cooperation = django_filters.ModelMultipleChoiceFilter( queryset=CategoryCooperation.objects.all(), widget=forms.CheckboxSelectMultiple, ) categories_areacrime = django_filters.ModelMultipleChoiceFilter( queryset=CategoryAreasCrime.objects.all(), widget=forms.CheckboxSelectMultiple, ) categories_procedural = django_filters.ModelMultipleChoiceFilter( queryset=CategoryProceduralCriminalLaw.objects.all(), widget=forms.CheckboxSelectMultiple, )
[docs] class Meta: model = NewsPage fields = [ "news_type", "is_featured_news", # 'language', "categories_region", "categories_foundation", "categories_institution", "categories_cooperation", "categories_areacrime", "categories_procedural", ]