mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Reduce duplication with filters (#4583)
* Reduce duplication with filters * fix typo * fix naming
This commit is contained in:
parent
508dd5425d
commit
3294b37ef0
@ -5,15 +5,14 @@ from django.db import transaction
|
|||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
|
||||||
from django_q.models import OrmQ
|
from django_q.models import OrmQ
|
||||||
from rest_framework import filters, permissions
|
from rest_framework import permissions
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
import users.models
|
import users.models
|
||||||
from InvenTree.filters import InvenTreeSearchFilter
|
from InvenTree.filters import SEARCH_ORDER_FILTER
|
||||||
from InvenTree.mixins import ListCreateAPI
|
from InvenTree.mixins import ListCreateAPI
|
||||||
from InvenTree.permissions import RolePermission
|
from InvenTree.permissions import RolePermission
|
||||||
from part.templatetags.inventree_extras import plugins_info
|
from part.templatetags.inventree_extras import plugins_info
|
||||||
@ -202,11 +201,7 @@ class AttachmentMixin:
|
|||||||
RolePermission,
|
RolePermission,
|
||||||
]
|
]
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
"""Save the user information when a file is uploaded."""
|
"""Save the user information when a file is uploaded."""
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
"""General filters for InvenTree."""
|
"""General filters for InvenTree."""
|
||||||
|
|
||||||
from rest_framework.filters import OrderingFilter, SearchFilter
|
from django_filters import rest_framework as rest_filters
|
||||||
|
from rest_framework import filters
|
||||||
|
|
||||||
from InvenTree.helpers import str2bool
|
from InvenTree.helpers import str2bool
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeSearchFilter(SearchFilter):
|
class InvenTreeSearchFilter(filters.SearchFilter):
|
||||||
"""Custom search filter which allows adjusting of search terms dynamically"""
|
"""Custom search filter which allows adjusting of search terms dynamically"""
|
||||||
|
|
||||||
def get_search_fields(self, view, request):
|
def get_search_fields(self, view, request):
|
||||||
@ -59,7 +60,7 @@ class InvenTreeSearchFilter(SearchFilter):
|
|||||||
return terms
|
return terms
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeOrderingFilter(OrderingFilter):
|
class InvenTreeOrderingFilter(filters.OrderingFilter):
|
||||||
"""Custom OrderingFilter class which allows aliased filtering of related fields.
|
"""Custom OrderingFilter class which allows aliased filtering of related fields.
|
||||||
|
|
||||||
To use, simply specify this filter in the "filter_backends" section.
|
To use, simply specify this filter in the "filter_backends" section.
|
||||||
@ -130,3 +131,21 @@ class InvenTreeOrderingFilter(OrderingFilter):
|
|||||||
ordering.append(a)
|
ordering.append(a)
|
||||||
|
|
||||||
return ordering
|
return ordering
|
||||||
|
|
||||||
|
|
||||||
|
SEARCH_ORDER_FILTER = [
|
||||||
|
rest_filters.DjangoFilterBackend,
|
||||||
|
InvenTreeSearchFilter,
|
||||||
|
filters.OrderingFilter,
|
||||||
|
]
|
||||||
|
|
||||||
|
SEARCH_ORDER_FILTER_ALIAS = [
|
||||||
|
rest_filters.DjangoFilterBackend,
|
||||||
|
InvenTreeSearchFilter,
|
||||||
|
InvenTreeOrderingFilter,
|
||||||
|
]
|
||||||
|
|
||||||
|
ORDER_FILTER = [
|
||||||
|
rest_filters.DjangoFilterBackend,
|
||||||
|
filters.OrderingFilter,
|
||||||
|
]
|
||||||
|
@ -11,7 +11,6 @@ from django_filters import rest_framework as rest_filters
|
|||||||
|
|
||||||
from InvenTree.api import AttachmentMixin, APIDownloadMixin, ListCreateDestroyAPIView, MetadataView, StatusView
|
from InvenTree.api import AttachmentMixin, APIDownloadMixin, ListCreateDestroyAPIView, MetadataView, StatusView
|
||||||
from InvenTree.helpers import str2bool, isNull, DownloadFile
|
from InvenTree.helpers import str2bool, isNull, DownloadFile
|
||||||
from InvenTree.filters import InvenTreeOrderingFilter, InvenTreeSearchFilter
|
|
||||||
from InvenTree.status_codes import BuildStatus
|
from InvenTree.status_codes import BuildStatus
|
||||||
from InvenTree.mixins import CreateAPI, RetrieveUpdateDestroyAPI, ListCreateAPI
|
from InvenTree.mixins import CreateAPI, RetrieveUpdateDestroyAPI, ListCreateAPI
|
||||||
|
|
||||||
@ -20,6 +19,7 @@ import build.serializers
|
|||||||
from build.models import Build, BuildItem, BuildOrderAttachment
|
from build.models import Build, BuildItem, BuildOrderAttachment
|
||||||
import part.models
|
import part.models
|
||||||
from users.models import Owner
|
from users.models import Owner
|
||||||
|
from InvenTree.filters import SEARCH_ORDER_FILTER_ALIAS
|
||||||
|
|
||||||
|
|
||||||
class BuildFilter(rest_filters.FilterSet):
|
class BuildFilter(rest_filters.FilterSet):
|
||||||
@ -99,11 +99,7 @@ class BuildList(APIDownloadMixin, ListCreateAPI):
|
|||||||
serializer_class = build.serializers.BuildSerializer
|
serializer_class = build.serializers.BuildSerializer
|
||||||
filterset_class = BuildFilter
|
filterset_class = BuildFilter
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'reference',
|
'reference',
|
||||||
|
@ -7,10 +7,9 @@ from django.urls import include, path, re_path
|
|||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
|
||||||
from django_q.tasks import async_task
|
from django_q.tasks import async_task
|
||||||
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
||||||
from rest_framework import filters, permissions, serializers
|
from rest_framework import permissions, serializers
|
||||||
from rest_framework.exceptions import NotAcceptable, NotFound
|
from rest_framework.exceptions import NotAcceptable, NotFound
|
||||||
from rest_framework.permissions import IsAdminUser
|
from rest_framework.permissions import IsAdminUser
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
@ -20,7 +19,7 @@ import common.models
|
|||||||
import common.serializers
|
import common.serializers
|
||||||
from InvenTree.api import BulkDeleteMixin
|
from InvenTree.api import BulkDeleteMixin
|
||||||
from InvenTree.config import CONFIG_LOOKUPS
|
from InvenTree.config import CONFIG_LOOKUPS
|
||||||
from InvenTree.filters import InvenTreeSearchFilter
|
from InvenTree.filters import ORDER_FILTER, SEARCH_ORDER_FILTER
|
||||||
from InvenTree.helpers import inheritors
|
from InvenTree.helpers import inheritors
|
||||||
from InvenTree.mixins import (ListAPI, RetrieveAPI, RetrieveUpdateAPI,
|
from InvenTree.mixins import (ListAPI, RetrieveAPI, RetrieveUpdateAPI,
|
||||||
RetrieveUpdateDestroyAPI)
|
RetrieveUpdateDestroyAPI)
|
||||||
@ -168,11 +167,7 @@ class SettingsList(ListAPI):
|
|||||||
This is inheritted by all list views for settings.
|
This is inheritted by all list views for settings.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'pk',
|
'pk',
|
||||||
@ -340,11 +335,7 @@ class NotificationList(NotificationMessageMixin, BulkDeleteMixin, ListAPI):
|
|||||||
|
|
||||||
permission_classes = [permissions.IsAuthenticated, ]
|
permission_classes = [permissions.IsAuthenticated, ]
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'category',
|
'category',
|
||||||
@ -409,10 +400,7 @@ class NewsFeedMixin:
|
|||||||
|
|
||||||
class NewsFeedEntryList(NewsFeedMixin, BulkDeleteMixin, ListAPI):
|
class NewsFeedEntryList(NewsFeedMixin, BulkDeleteMixin, ListAPI):
|
||||||
"""List view for all news items."""
|
"""List view for all news items."""
|
||||||
filter_backends = [
|
filter_backends = ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'published',
|
'published',
|
||||||
|
@ -5,12 +5,12 @@ from django.urls import include, path, re_path
|
|||||||
|
|
||||||
from django_filters import rest_framework as rest_filters
|
from django_filters import rest_framework as rest_filters
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework import filters
|
|
||||||
|
|
||||||
import part.models
|
import part.models
|
||||||
from InvenTree.api import (AttachmentMixin, ListCreateDestroyAPIView,
|
from InvenTree.api import (AttachmentMixin, ListCreateDestroyAPIView,
|
||||||
MetadataView)
|
MetadataView)
|
||||||
from InvenTree.filters import InvenTreeOrderingFilter, InvenTreeSearchFilter
|
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
||||||
|
SEARCH_ORDER_FILTER_ALIAS)
|
||||||
from InvenTree.helpers import str2bool
|
from InvenTree.helpers import str2bool
|
||||||
from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI
|
from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI
|
||||||
|
|
||||||
@ -44,11 +44,7 @@ class CompanyList(ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'is_customer',
|
'is_customer',
|
||||||
@ -114,11 +110,7 @@ class ContactList(ListCreateDestroyAPIView):
|
|||||||
queryset = Contact.objects.all()
|
queryset = Contact.objects.all()
|
||||||
serializer_class = ContactSerializer
|
serializer_class = ContactSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'company',
|
'company',
|
||||||
@ -192,11 +184,7 @@ class ManufacturerPartList(ListCreateDestroyAPIView):
|
|||||||
|
|
||||||
return self.serializer_class(*args, **kwargs)
|
return self.serializer_class(*args, **kwargs)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
search_fields = [
|
search_fields = [
|
||||||
'manufacturer__name',
|
'manufacturer__name',
|
||||||
@ -287,11 +275,7 @@ class ManufacturerPartParameterList(ListCreateDestroyAPIView):
|
|||||||
|
|
||||||
return self.serializer_class(*args, **kwargs)
|
return self.serializer_class(*args, **kwargs)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
search_fields = [
|
search_fields = [
|
||||||
'name',
|
'name',
|
||||||
@ -388,11 +372,7 @@ class SupplierPartList(ListCreateDestroyAPIView):
|
|||||||
|
|
||||||
serializer_class = SupplierPartSerializer
|
serializer_class = SupplierPartSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'SKU',
|
'SKU',
|
||||||
@ -493,10 +473,7 @@ class SupplierPriceBreakList(ListCreateAPI):
|
|||||||
|
|
||||||
return self.serializer_class(*args, **kwargs)
|
return self.serializer_class(*args, **kwargs)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'quantity',
|
'quantity',
|
||||||
|
@ -10,7 +10,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
|
|
||||||
from django_filters import rest_framework as rest_filters
|
from django_filters import rest_framework as rest_filters
|
||||||
from django_ical.views import ICalFeed
|
from django_ical.views import ICalFeed
|
||||||
from rest_framework import filters, status
|
from rest_framework import status
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ from common.settings import settings
|
|||||||
from company.models import SupplierPart
|
from company.models import SupplierPart
|
||||||
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
||||||
ListCreateDestroyAPIView, MetadataView, StatusView)
|
ListCreateDestroyAPIView, MetadataView, StatusView)
|
||||||
from InvenTree.filters import InvenTreeOrderingFilter, InvenTreeSearchFilter
|
from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS
|
||||||
from InvenTree.helpers import DownloadFile, str2bool
|
from InvenTree.helpers import DownloadFile, str2bool
|
||||||
from InvenTree.mixins import (CreateAPI, ListAPI, ListCreateAPI,
|
from InvenTree.mixins import (CreateAPI, ListAPI, ListCreateAPI,
|
||||||
RetrieveUpdateDestroyAPI)
|
RetrieveUpdateDestroyAPI)
|
||||||
@ -61,11 +61,7 @@ class GeneralExtraLineList(APIDownloadMixin):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'title',
|
'title',
|
||||||
@ -307,11 +303,7 @@ class PurchaseOrderList(PurchaseOrderMixin, APIDownloadMixin, ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_field_aliases = {
|
ordering_field_aliases = {
|
||||||
'reference': ['reference_int', 'reference'],
|
'reference': ['reference_int', 'reference'],
|
||||||
@ -508,11 +500,7 @@ class PurchaseOrderLineItemList(PurchaseOrderLineItemMixin, APIDownloadMixin, Li
|
|||||||
|
|
||||||
return DownloadFile(filedata, filename)
|
return DownloadFile(filedata, filename)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_field_aliases = {
|
ordering_field_aliases = {
|
||||||
'MPN': 'part__manufacturer_part__MPN',
|
'MPN': 'part__manufacturer_part__MPN',
|
||||||
@ -693,11 +681,7 @@ class SalesOrderList(SalesOrderMixin, APIDownloadMixin, ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_field_aliases = {
|
ordering_field_aliases = {
|
||||||
'reference': ['reference_int', 'reference'],
|
'reference': ['reference_int', 'reference'],
|
||||||
@ -817,11 +801,7 @@ class SalesOrderLineItemList(SalesOrderLineItemMixin, APIDownloadMixin, ListCrea
|
|||||||
|
|
||||||
return DownloadFile(filedata, filename)
|
return DownloadFile(filedata, filename)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'part__name',
|
'part__name',
|
||||||
@ -1154,11 +1134,7 @@ class ReturnOrderList(ReturnOrderMixin, APIDownloadMixin, ListCreateAPI):
|
|||||||
|
|
||||||
return DownloadFile(filedata, filename)
|
return DownloadFile(filedata, filename)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_field_aliases = {
|
ordering_field_aliases = {
|
||||||
'reference': ['reference_int', 'reference'],
|
'reference': ['reference_int', 'reference'],
|
||||||
@ -1302,11 +1278,7 @@ class ReturnOrderLineItemList(ReturnOrderLineItemMixin, APIDownloadMixin, ListCr
|
|||||||
|
|
||||||
raise NotImplementedError("download_queryset not yet implemented for this endpoint")
|
raise NotImplementedError("download_queryset not yet implemented for this endpoint")
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
rest_filters.DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'reference',
|
'reference',
|
||||||
|
@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
|
|
||||||
from django_filters import rest_framework as rest_filters
|
from django_filters import rest_framework as rest_filters
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework import filters, permissions, serializers, status
|
from rest_framework import permissions, serializers, status
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
@ -17,7 +17,9 @@ import order.models
|
|||||||
from build.models import Build, BuildItem
|
from build.models import Build, BuildItem
|
||||||
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
||||||
ListCreateDestroyAPIView, MetadataView)
|
ListCreateDestroyAPIView, MetadataView)
|
||||||
from InvenTree.filters import InvenTreeOrderingFilter, InvenTreeSearchFilter
|
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
||||||
|
SEARCH_ORDER_FILTER_ALIAS,
|
||||||
|
InvenTreeSearchFilter)
|
||||||
from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull,
|
from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull,
|
||||||
str2bool, str2int)
|
str2bool, str2int)
|
||||||
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
||||||
@ -152,11 +154,7 @@ class CategoryList(CategoryMixin, APIDownloadMixin, ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'name',
|
'name',
|
||||||
@ -220,10 +218,7 @@ class CategoryTree(ListAPI):
|
|||||||
queryset = PartCategory.objects.all()
|
queryset = PartCategory.objects.all()
|
||||||
serializer_class = part_serializers.CategoryTree
|
serializer_class = part_serializers.CategoryTree
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
# Order by tree level (top levels first) and then name
|
# Order by tree level (top levels first) and then name
|
||||||
ordering = ['level', 'name']
|
ordering = ['level', 'name']
|
||||||
@ -384,11 +379,7 @@ class PartTestTemplateList(ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class PartThumbs(ListAPI):
|
class PartThumbs(ListAPI):
|
||||||
@ -1224,11 +1215,7 @@ class PartList(PartMixin, APIDownloadMixin, ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'name',
|
'name',
|
||||||
@ -1337,11 +1324,7 @@ class PartParameterTemplateList(ListCreateAPI):
|
|||||||
queryset = PartParameterTemplate.objects.all()
|
queryset = PartParameterTemplate.objects.all()
|
||||||
serializer_class = part_serializers.PartParameterTemplateSerializer
|
serializer_class = part_serializers.PartParameterTemplateSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'name',
|
'name',
|
||||||
@ -1462,10 +1445,7 @@ class PartStocktakeList(ListCreateAPI):
|
|||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'part',
|
'part',
|
||||||
@ -1496,10 +1476,7 @@ class PartStocktakeReportList(ListAPI):
|
|||||||
queryset = PartStocktakeReport.objects.all()
|
queryset = PartStocktakeReport.objects.all()
|
||||||
serializer_class = part_serializers.PartStocktakeReportSerializer
|
serializer_class = part_serializers.PartStocktakeReportSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'date',
|
'date',
|
||||||
@ -1731,11 +1708,7 @@ class BomList(BomMixin, ListCreateDestroyAPIView):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
search_fields = [
|
search_fields = [
|
||||||
'reference',
|
'reference',
|
||||||
@ -1836,11 +1809,7 @@ class BomItemSubstituteList(ListCreateAPI):
|
|||||||
serializer_class = part_serializers.BomItemSubstituteSerializer
|
serializer_class = part_serializers.BomItemSubstituteSerializer
|
||||||
queryset = BomItemSubstitute.objects.all()
|
queryset = BomItemSubstitute.objects.all()
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'part',
|
'part',
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
from django.urls import include, path, re_path
|
from django.urls import include, path, re_path
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework import filters, permissions, status
|
from rest_framework import permissions, status
|
||||||
from rest_framework.exceptions import NotFound
|
from rest_framework.exceptions import NotFound
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
import plugin.serializers as PluginSerializers
|
import plugin.serializers as PluginSerializers
|
||||||
from common.api import GlobalSettingsPermissions
|
from common.api import GlobalSettingsPermissions
|
||||||
from InvenTree.filters import InvenTreeSearchFilter
|
from InvenTree.filters import SEARCH_ORDER_FILTER
|
||||||
from InvenTree.mixins import (CreateAPI, ListAPI, RetrieveUpdateAPI,
|
from InvenTree.mixins import (CreateAPI, ListAPI, RetrieveUpdateAPI,
|
||||||
RetrieveUpdateDestroyAPI, UpdateAPI)
|
RetrieveUpdateDestroyAPI, UpdateAPI)
|
||||||
from InvenTree.permissions import IsSuperuser
|
from InvenTree.permissions import IsSuperuser
|
||||||
@ -57,11 +57,7 @@ class PluginList(ListAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'active',
|
'active',
|
||||||
|
@ -11,8 +11,7 @@ from django.urls import include, path, re_path
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from django_filters import rest_framework as rest_filters
|
from django_filters import rest_framework as rest_filters
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from rest_framework import status
|
||||||
from rest_framework import filters, status
|
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
|
|
||||||
@ -24,7 +23,8 @@ from company.models import Company, SupplierPart
|
|||||||
from company.serializers import CompanySerializer, SupplierPartSerializer
|
from company.serializers import CompanySerializer, SupplierPartSerializer
|
||||||
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
||||||
ListCreateDestroyAPIView, MetadataView, StatusView)
|
ListCreateDestroyAPIView, MetadataView, StatusView)
|
||||||
from InvenTree.filters import InvenTreeOrderingFilter, InvenTreeSearchFilter
|
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
||||||
|
SEARCH_ORDER_FILTER_ALIAS)
|
||||||
from InvenTree.helpers import (DownloadFile, extract_serial_numbers, isNull,
|
from InvenTree.helpers import (DownloadFile, extract_serial_numbers, isNull,
|
||||||
str2bool, str2int)
|
str2bool, str2int)
|
||||||
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
||||||
@ -294,11 +294,7 @@ class StockLocationList(APIDownloadMixin, ListCreateAPI):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'name',
|
'name',
|
||||||
@ -333,10 +329,7 @@ class StockLocationTree(ListAPI):
|
|||||||
queryset = StockLocation.objects.all()
|
queryset = StockLocation.objects.all()
|
||||||
serializer_class = StockSerializers.LocationTreeSerializer
|
serializer_class = StockSerializers.LocationTreeSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
# Order by tree level (top levels first) and then name
|
# Order by tree level (top levels first) and then name
|
||||||
ordering = ['level', 'name']
|
ordering = ['level', 'name']
|
||||||
@ -1007,11 +1000,7 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView):
|
|||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER_ALIAS
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
InvenTreeOrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
ordering_field_aliases = {
|
ordering_field_aliases = {
|
||||||
'SKU': 'supplier_part__SKU',
|
'SKU': 'supplier_part__SKU',
|
||||||
@ -1054,11 +1043,7 @@ class StockAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
|
|||||||
queryset = StockItemAttachment.objects.all()
|
queryset = StockItemAttachment.objects.all()
|
||||||
serializer_class = StockSerializers.StockItemAttachmentSerializer
|
serializer_class = StockSerializers.StockItemAttachmentSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'stock_item',
|
'stock_item',
|
||||||
@ -1085,11 +1070,7 @@ class StockItemTestResultList(ListCreateDestroyAPIView):
|
|||||||
queryset = StockItemTestResult.objects.all()
|
queryset = StockItemTestResult.objects.all()
|
||||||
serializer_class = StockSerializers.StockItemTestResultSerializer
|
serializer_class = StockSerializers.StockItemTestResultSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'test',
|
'test',
|
||||||
@ -1310,11 +1291,7 @@ class StockTrackingList(ListAPI):
|
|||||||
headers = self.get_success_headers(serializer.data)
|
headers = self.get_success_headers(serializer.data)
|
||||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = SEARCH_ORDER_FILTER
|
||||||
DjangoFilterBackend,
|
|
||||||
InvenTreeSearchFilter,
|
|
||||||
filters.OrderingFilter,
|
|
||||||
]
|
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
'item',
|
'item',
|
||||||
|
Loading…
Reference in New Issue
Block a user