[FIX] ASSET : Asset category creation and filter,search issue fixes in asset view

This commit is contained in:
Horilla
2024-10-09 15:13:05 +05:30
parent 90da9016c5
commit ffc9a1d708
2 changed files with 42 additions and 29 deletions

View File

@@ -6,6 +6,7 @@ import uuid
import django_filters
from django import forms
from django.db.models import Q
from django_filters import FilterSet
from base.methods import reload_queryset
@@ -239,18 +240,9 @@ class AssetCategoryFilter(CustomFilterSet):
Custom filter set for AssetCategory instances.
"""
search = django_filters.CharFilter(method="serach_method")
search = django_filters.CharFilter(method="search_method")
class Meta:
"""
Specifies the model and fields to be used for filtering AssetCategory instances.
Attributes:
model (class): The model class AssetCategory to be filtered.
fields (str): A special value "__all__" to include all fields
of the model in the filter.
"""
model = AssetCategory
fields = "__all__"
@@ -259,22 +251,33 @@ class AssetCategoryFilter(CustomFilterSet):
for visible in self.form.visible_fields():
visible.field.widget.attrs["id"] = str(uuid.uuid4())
def serach_method(self, queryset, _, value):
def search_method(self, queryset, name, value):
"""
Search method
Search method to filter by asset category name or related asset name.
"""
return (
queryset.filter(asset_category_name__icontains=value)
| queryset.filter(asset__asset_name__icontains=value)
if not value:
return queryset # Return unfiltered queryset if no search term is provided
return queryset.filter(
Q(asset_category_name__icontains=value)
| Q(asset__asset_name__icontains=value)
).distinct()
def filter_queryset(self, queryset):
"""
Filters queryset and applies AssetFilter if necessary.
"""
# Get the base filtered queryset
queryset = super().filter_queryset(queryset)
assets = AssetFilter(data=self.data).qs
return (
queryset.filter(asset__pk__in=assets.values_list("pk", flat=True))
).distinct()
# Filter by assets if asset data is present in the GET request
if self.data and "asset__pk" in self.data:
assets = AssetFilter(data=self.data).qs
queryset = queryset.filter(
asset__pk__in=assets.values_list("pk", flat=True)
)
return queryset.distinct()
class AssetRequestReGroup:

View File

@@ -439,23 +439,33 @@ def delete_asset_category(request, cat_id):
def filter_pagination_asset_category(request):
"""
This view is used for pagination
This view is used for pagination and filtering asset categories
"""
search = request.GET.get("search")
if search is None:
search = ""
search = request.GET.get("search", "")
previous_data = request.GET.urlencode()
asset_category_filtered = AssetCategoryFilter(
request.GET,
)
asset_category_queryset = asset_category_filtered.qs
asset_category_paginator = Paginator(asset_category_filtered.qs, get_pagination())
asset_category_queryset = AssetCategory.objects.all()
if request.GET:
asset_category_filtered = AssetCategoryFilter(
request.GET, queryset=asset_category_queryset
)
asset_category_queryset = (
asset_category_filtered.qs
) # Filter the queryset based on the GET params
asset_category_filtered_form = asset_category_filtered.form # Show filter form
else:
asset_category_filtered_form = None
# Pagination
asset_category_paginator = Paginator(asset_category_queryset, get_pagination())
page_number = request.GET.get("page")
asset_categories = asset_category_paginator.get_page(page_number)
data_dict = parse_qs(previous_data)
get_key_instances(AssetCategory, data_dict)
asset_creation_form = AssetForm()
if data_dict.get("type"):
del data_dict["type"]
@@ -465,7 +475,7 @@ def filter_pagination_asset_category(request):
"asset_creation_form": asset_creation_form,
"asset_category_form": asset_category_form,
"asset_categories": asset_categories,
"asset_category_filter_form": asset_category_filtered.form,
"asset_category_filter_form": asset_category_filtered_form,
"asset_filter_form": asset_filter_form.form,
"pg": previous_data,
"filter_dict": data_dict,