[UPDT] HORILLA: Updated horilla filters __init__ function

This commit is contained in:
Horilla
2025-09-16 10:15:09 +05:30
parent dcc85ef638
commit 1f93f74a35

View File

@@ -8,6 +8,7 @@ import django_filters
from django import forms from django import forms
from django.core.paginator import Page, Paginator from django.core.paginator import Page, Paginator
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _
from django_filters.filterset import FILTER_FOR_DBFIELD_DEFAULTS from django_filters.filterset import FILTER_FOR_DBFIELD_DEFAULTS
from base.methods import reload_queryset from base.methods import reload_queryset
@@ -47,38 +48,95 @@ def filter_by_name(queryset, name, value):
class FilterSet(django_filters.FilterSet): class FilterSet(django_filters.FilterSet):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
reload_queryset(self.form.fields) 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(): for field_name, field in self.form.fields.items():
filter_widget = self.filters[field_name] widget = field.widget
widget = filter_widget.field.widget label = _(field.label) if field.label else ""
if isinstance(
widget, (forms.NumberInput, forms.EmailInput, forms.TextInput) # Date field
): if isinstance(widget, forms.DateInput):
field.widget.attrs.update({"class": "oh-input w-100"}) widget.input_type = "date"
elif isinstance(widget, (forms.Select,)): widget.format = "%Y-%m-%d"
field.widget.attrs.update( 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", "class": f"{existing_class} form-control",
"id": uuid.uuid4(), "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( elif isinstance(
widget, widget,
( (
forms.CheckboxInput, forms.NumberInput,
forms.CheckboxSelectMultiple, forms.EmailInput,
forms.TextInput,
forms.FileInput,
forms.URLInput,
), ),
): ):
field.widget.attrs.update({"class": "oh-switch__checkbox"}) existing_class = widget.attrs.get("class", default_input_class)
elif isinstance(widget, (forms.ModelChoiceField)): widget.attrs.update(
field.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): class HorillaPaginator(Paginator):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):