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
|
||||
"""
|
||||
|
||||
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:]
|
||||
reverse = True
|
||||
|
||||
# Are aliases defined for this field?
|
||||
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:
|
||||
ordering[idx] = '-' + ordering[idx]
|
||||
a = '-' + a
|
||||
|
||||
ordering.append(a)
|
||||
|
||||
return ordering
|
||||
|
@ -17,6 +17,7 @@ from django_filters import rest_framework as rest_filters
|
||||
|
||||
from InvenTree.api import AttachmentMixin
|
||||
from InvenTree.helpers import str2bool, isNull
|
||||
from InvenTree.filters import InvenTreeOrderingFilter
|
||||
from InvenTree.status_codes import BuildStatus
|
||||
|
||||
from .models import Build, BuildItem, BuildOrderAttachment
|
||||
@ -68,7 +69,7 @@ class BuildList(generics.ListCreateAPIView):
|
||||
filter_backends = [
|
||||
DjangoFilterBackend,
|
||||
filters.SearchFilter,
|
||||
filters.OrderingFilter,
|
||||
InvenTreeOrderingFilter,
|
||||
]
|
||||
|
||||
ordering_fields = [
|
||||
@ -83,6 +84,10 @@ class BuildList(generics.ListCreateAPIView):
|
||||
'responsible',
|
||||
]
|
||||
|
||||
ordering_field_aliases = {
|
||||
'reference': ['integer_ref', 'reference'],
|
||||
}
|
||||
|
||||
search_fields = [
|
||||
'reference',
|
||||
'part__name',
|
||||
|
Loading…
Reference in New Issue
Block a user