From 1f93f74a3502ef4d5001330cb3b0c303b6f544a5 Mon Sep 17 00:00:00 2001 From: Horilla Date: Tue, 16 Sep 2025 10:15:09 +0530 Subject: [PATCH] [UPDT] HORILLA: Updated horilla filters __init__ function --- horilla/filters.py | 94 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 18 deletions(-) diff --git a/horilla/filters.py b/horilla/filters.py index 4ca3706c4..ff67267d4 100755 --- a/horilla/filters.py +++ b/horilla/filters.py @@ -8,6 +8,7 @@ import django_filters from django import forms from django.core.paginator import Page, Paginator from django.db import models +from django.utils.translation import gettext_lazy as _ from django_filters.filterset import FILTER_FOR_DBFIELD_DEFAULTS from base.methods import reload_queryset @@ -47,38 +48,95 @@ def filter_by_name(queryset, name, value): class FilterSet(django_filters.FilterSet): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + reload_queryset(self.form.fields) + + default_input_class = "oh-input w-100" + select_class = "oh-select oh-select-2" + checkbox_class = "oh-switch__checkbox" + for field_name, field in self.form.fields.items(): - filter_widget = self.filters[field_name] - widget = filter_widget.field.widget - if isinstance( - widget, (forms.NumberInput, forms.EmailInput, forms.TextInput) - ): - field.widget.attrs.update({"class": "oh-input w-100"}) - elif isinstance(widget, (forms.Select,)): - field.widget.attrs.update( + widget = field.widget + label = _(field.label) if field.label else "" + + # Date field + if isinstance(widget, forms.DateInput): + widget.input_type = "date" + widget.format = "%Y-%m-%d" + field.input_formats = ["%Y-%m-%d"] + + existing_class = widget.attrs.get("class", default_input_class) + widget.attrs.update( { - "class": "oh-select oh-select-2 select2-hidden-accessible", - "id": uuid.uuid4(), + "class": f"{existing_class} form-control", + "placeholder": label, } ) - elif isinstance(widget, (forms.Textarea)): - field.widget.attrs.update({"class": "oh-input w-100"}) + + # Time field + elif isinstance(widget, forms.TimeInput): + widget.input_type = "time" + widget.format = "%H:%M" + field.input_formats = ["%H:%M"] + + existing_class = widget.attrs.get("class", default_input_class) + widget.attrs.update( + { + "class": f"{existing_class} form-control", + "placeholder": label, + } + ) + + # Number, Email, Text, File, URL fields elif isinstance( widget, ( - forms.CheckboxInput, - forms.CheckboxSelectMultiple, + forms.NumberInput, + forms.EmailInput, + forms.TextInput, + forms.FileInput, + forms.URLInput, ), ): - field.widget.attrs.update({"class": "oh-switch__checkbox"}) - elif isinstance(widget, (forms.ModelChoiceField)): - field.widget.attrs.update( + existing_class = widget.attrs.get("class", default_input_class) + widget.attrs.update( { - "class": "oh-select oh-select-2 select2-hidden-accessible", + "class": f"{existing_class} form-control", + "placeholder": _(field.label.title()) if field.label else "", } ) + # Select fields + elif isinstance(widget, forms.Select): + if not isinstance(field, forms.ModelMultipleChoiceField): + field.empty_label = _("---Choose {label}---").format(label=label) + existing_class = widget.attrs.get("class", select_class) + widget.attrs.update( + { + "class": existing_class, + "id": str(uuid.uuid4()), + } + ) + + # Textarea + elif isinstance(widget, forms.Textarea): + existing_class = widget.attrs.get("class", default_input_class) + widget.attrs.update( + { + "class": f"{existing_class} form-control", + "placeholder": label, + "rows": 2, + "cols": 40, + } + ) + + # Checkbox types + elif isinstance( + widget, (forms.CheckboxInput, forms.CheckboxSelectMultiple) + ): + existing_class = widget.attrs.get("class", checkbox_class) + widget.attrs.update({"class": existing_class}) + class HorillaPaginator(Paginator): def __init__(self, *args, **kwargs):