[FIX] ASSET : Asset category creation and filter,search issue fixes in asset view
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user