mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Transition "has IPN" filter to django-filters approach
This commit is contained in:
parent
ba0a13443f
commit
a8a21f7c9d
@ -8,7 +8,7 @@ from __future__ import unicode_literals
|
|||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.db.models import Q, F, Count, Min, Max, Avg
|
from django.db.models import Q, F, Count, Min, Max, Avg, query
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
@ -413,6 +413,18 @@ class PartFilter(rest_filters.FilterSet):
|
|||||||
Uses the django_filters extension framework
|
Uses the django_filters extension framework
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Filter by parts which have (or not) an IPN value
|
||||||
|
has_ipn = rest_filters.BooleanFilter(label='Has IPN', method='filter_has_ipn')
|
||||||
|
|
||||||
|
def filter_has_ipn(self, queryset, name, value):
|
||||||
|
|
||||||
|
value = str2bool(value)
|
||||||
|
|
||||||
|
if value:
|
||||||
|
queryset = queryset.exclude(IPN='')
|
||||||
|
else:
|
||||||
|
queryset = queryset.filter(IPN='')
|
||||||
|
|
||||||
# Exact match for IPN
|
# Exact match for IPN
|
||||||
ipn = rest_filters.CharFilter(
|
ipn = rest_filters.CharFilter(
|
||||||
label='Filter by exact IPN (internal part number)',
|
label='Filter by exact IPN (internal part number)',
|
||||||
@ -422,11 +434,12 @@ class PartFilter(rest_filters.FilterSet):
|
|||||||
|
|
||||||
# Regex match for IPN
|
# Regex match for IPN
|
||||||
ipn_regex = rest_filters.CharFilter(
|
ipn_regex = rest_filters.CharFilter(
|
||||||
|
label='Filter by regex on IPN (internal part number) field',
|
||||||
field_name='IPN', lookup_expr='iregex'
|
field_name='IPN', lookup_expr='iregex'
|
||||||
)
|
)
|
||||||
|
|
||||||
# low_stock filter
|
# low_stock filter
|
||||||
low_stock = rest_filters.BooleanFilter(method='filter_low_stock')
|
low_stock = rest_filters.BooleanFilter(label='Low stock', method='filter_low_stock')
|
||||||
|
|
||||||
def filter_low_stock(self, queryset, name, value):
|
def filter_low_stock(self, queryset, name, value):
|
||||||
"""
|
"""
|
||||||
@ -447,7 +460,7 @@ class PartFilter(rest_filters.FilterSet):
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
# has_stock filter
|
# has_stock filter
|
||||||
has_stock = rest_filters.BooleanFilter(method='filter_has_stock')
|
has_stock = rest_filters.BooleanFilter(label='Has stock', method='filter_has_stock')
|
||||||
|
|
||||||
def filter_has_stock(self, queryset, name, value):
|
def filter_has_stock(self, queryset, name, value):
|
||||||
|
|
||||||
@ -460,7 +473,7 @@ class PartFilter(rest_filters.FilterSet):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
is_template = rest_filters.CharFilter()
|
is_template = rest_filters.BooleanFilter()
|
||||||
|
|
||||||
assembly = rest_filters.BooleanFilter()
|
assembly = rest_filters.BooleanFilter()
|
||||||
|
|
||||||
@ -539,7 +552,7 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
# Do we wish to include PartCategory detail?
|
# Do we wish to include PartCategory detail?
|
||||||
if str2bool(request.query_params.get('category_detail', False)):
|
if str2bool(request.query_params.get('category_detail', False)):
|
||||||
|
|
||||||
# Work out which part categorie we need to query
|
# Work out which part categories we need to query
|
||||||
category_ids = set()
|
category_ids = set()
|
||||||
|
|
||||||
for part in data:
|
for part in data:
|
||||||
@ -641,28 +654,6 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
except (ValueError, Part.DoesNotExist):
|
except (ValueError, Part.DoesNotExist):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Filter by whether the part has an IPN (internal part number) defined
|
|
||||||
has_ipn = params.get('has_ipn', None)
|
|
||||||
|
|
||||||
if has_ipn is not None:
|
|
||||||
has_ipn = str2bool(has_ipn)
|
|
||||||
|
|
||||||
if has_ipn:
|
|
||||||
queryset = queryset.exclude(IPN='')
|
|
||||||
else:
|
|
||||||
queryset = queryset.filter(IPN='')
|
|
||||||
|
|
||||||
# Filter by IPN
|
|
||||||
"""
|
|
||||||
ipn = params.get('ipn', None)
|
|
||||||
|
|
||||||
if ipn is not None:
|
|
||||||
|
|
||||||
queryset = queryset.filter(IPN=ipn)
|
|
||||||
|
|
||||||
"""
|
|
||||||
# Filter by IPN (regex support)
|
|
||||||
|
|
||||||
# Filter by whether the BOM has been validated (or not)
|
# Filter by whether the BOM has been validated (or not)
|
||||||
bom_valid = params.get('bom_valid', None)
|
bom_valid = params.get('bom_valid', None)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user