mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Add new functionality to InvenTreeOrderingFilter
- Allow ordering by multiple field aliases - Simply way to implement "integer ordering" functionality
This commit is contained in:
parent
0cdc82a4b3
commit
233672d822
@ -34,18 +34,49 @@ class InvenTreeOrderingFilter(OrderingFilter):
|
|||||||
Ordering fields should be mapped to separate fields
|
Ordering fields should be mapped to separate fields
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for idx, field in enumerate(ordering):
|
idx = 0
|
||||||
|
|
||||||
reverse = False
|
ordering_initial = ordering
|
||||||
|
ordering = []
|
||||||
|
|
||||||
if field.startswith('-'):
|
for field in ordering_initial:
|
||||||
|
|
||||||
|
reverse = field.startswith('-')
|
||||||
|
|
||||||
|
if reverse:
|
||||||
field = field[1:]
|
field = field[1:]
|
||||||
reverse = True
|
|
||||||
|
|
||||||
|
# Are aliases defined for this field?
|
||||||
if field in aliases:
|
if field in aliases:
|
||||||
ordering[idx] = aliases[field]
|
alias = aliases[field]
|
||||||
|
else:
|
||||||
|
alias = field
|
||||||
|
|
||||||
|
"""
|
||||||
|
Potentially, a single field could be "aliased" to multiple field,
|
||||||
|
|
||||||
|
(For example to enforce a particular ordering sequence)
|
||||||
|
|
||||||
|
e.g. to filter first by the integer value...
|
||||||
|
|
||||||
|
ordering_field_aliases = {
|
||||||
|
"reference": ["integer_ref", "reference"]
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
if type(alias) is str:
|
||||||
|
alias = [alias]
|
||||||
|
elif type(alias) in [list, tuple]:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# Unsupported alias type
|
||||||
|
continue
|
||||||
|
|
||||||
|
for a in alias:
|
||||||
if reverse:
|
if reverse:
|
||||||
ordering[idx] = '-' + ordering[idx]
|
a = '-' + a
|
||||||
|
|
||||||
|
ordering.append(a)
|
||||||
|
|
||||||
return ordering
|
return ordering
|
||||||
|
@ -17,6 +17,7 @@ from django_filters import rest_framework as rest_filters
|
|||||||
|
|
||||||
from InvenTree.api import AttachmentMixin
|
from InvenTree.api import AttachmentMixin
|
||||||
from InvenTree.helpers import str2bool, isNull
|
from InvenTree.helpers import str2bool, isNull
|
||||||
|
from InvenTree.filters import InvenTreeOrderingFilter
|
||||||
from InvenTree.status_codes import BuildStatus
|
from InvenTree.status_codes import BuildStatus
|
||||||
|
|
||||||
from .models import Build, BuildItem, BuildOrderAttachment
|
from .models import Build, BuildItem, BuildOrderAttachment
|
||||||
@ -68,7 +69,7 @@ class BuildList(generics.ListCreateAPIView):
|
|||||||
filter_backends = [
|
filter_backends = [
|
||||||
DjangoFilterBackend,
|
DjangoFilterBackend,
|
||||||
filters.SearchFilter,
|
filters.SearchFilter,
|
||||||
filters.OrderingFilter,
|
InvenTreeOrderingFilter,
|
||||||
]
|
]
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
@ -83,6 +84,10 @@ class BuildList(generics.ListCreateAPIView):
|
|||||||
'responsible',
|
'responsible',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
ordering_field_aliases = {
|
||||||
|
'reference': ['integer_ref', 'reference'],
|
||||||
|
}
|
||||||
|
|
||||||
search_fields = [
|
search_fields = [
|
||||||
'reference',
|
'reference',
|
||||||
'part__name',
|
'part__name',
|
||||||
|
Loading…
Reference in New Issue
Block a user