mirror of
https://github.com/MOIS3Y/logs-collector.git
synced 2025-09-13 05:03:01 +02:00
Add: simple filters to modelviewsets
This commit is contained in:
39
logs_collector/collector/filters.py
Normal file
39
logs_collector/collector/filters.py
Normal file
@@ -0,0 +1,39 @@
|
||||
from django_filters.rest_framework import (
|
||||
CharFilter,
|
||||
FilterSet,
|
||||
NumberFilter,
|
||||
)
|
||||
from django_filters import widgets
|
||||
|
||||
from .models import Archive, Ticket
|
||||
from .utils import DateTimeFilterMixin
|
||||
|
||||
|
||||
class ArchiveFilter(DateTimeFilterMixin, FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = Archive
|
||||
fields = {
|
||||
'id': ['exact', 'in', 'lte', 'gte'],
|
||||
'ticket': ['exact', 'in', 'lte', 'gte'],
|
||||
'time_create': ['exact', 'lte', 'gte']
|
||||
}
|
||||
|
||||
|
||||
class TicketFilter(DateTimeFilterMixin, FilterSet):
|
||||
number = NumberFilter(
|
||||
field_name='number',
|
||||
widget=widgets.CSVWidget(),
|
||||
)
|
||||
user = CharFilter(
|
||||
field_name='user__username'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields = {
|
||||
'id': ['exact', 'in', 'lte', 'gte'],
|
||||
'number': ['exact', 'contains', 'in', 'lte', 'gte'],
|
||||
'resolved': ['exact'],
|
||||
'user': ['exact']
|
||||
}
|
@@ -77,6 +77,6 @@ urlpatterns = [
|
||||
# █▀█ █▀▀ █
|
||||
# -- -- --
|
||||
|
||||
# CREATE:
|
||||
# CRUD:
|
||||
path('api/v1/', include(router.urls))
|
||||
]
|
||||
|
@@ -1,9 +1,12 @@
|
||||
import os
|
||||
from django_filters import NumberFilter
|
||||
|
||||
|
||||
def logs_dir_path(instance, filename):
|
||||
# file will be uploaded to
|
||||
# MEDIA_ROOT_FOR_SENSITIVE_FILES/<ticket-token>/<filename>
|
||||
"""
|
||||
file will be uploaded to
|
||||
MEDIA_ROOT_FOR_SENSITIVE_FILES/<ticket-token>/<filename>
|
||||
"""
|
||||
return f'{instance.ticket.number}/{filename}'
|
||||
|
||||
|
||||
@@ -37,3 +40,22 @@ class PageTitleViewMixin:
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['title'] = self.get_title()
|
||||
return context
|
||||
|
||||
|
||||
class DateTimeFilterMixin:
|
||||
year__gte = NumberFilter(
|
||||
field_name='time_create',
|
||||
lookup_expr='year__gte'
|
||||
)
|
||||
year__lte = NumberFilter(
|
||||
field_name='time_create',
|
||||
lookup_expr='year__lte'
|
||||
)
|
||||
month__gte = NumberFilter(
|
||||
field_name='time_create',
|
||||
lookup_expr='month__gte'
|
||||
)
|
||||
month__lte = NumberFilter(
|
||||
field_name='time_create',
|
||||
lookup_expr='month__lte'
|
||||
)
|
||||
|
@@ -12,12 +12,14 @@ from rest_framework import status
|
||||
from rest_framework.parsers import FormParser, MultiPartParser
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
|
||||
# from rest_framework import mixins
|
||||
from rest_framework import viewsets
|
||||
from rest_framework import filters
|
||||
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
from .models import Archive, Ticket, Platform
|
||||
from .forms import TicketForm
|
||||
from .filters import ArchiveFilter, TicketFilter
|
||||
from .utils import PageTitleViewMixin, is_ajax
|
||||
from .permissions import IsGuestUpload
|
||||
|
||||
@@ -187,6 +189,8 @@ class ArchiveViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = ArchiveSerializer
|
||||
parser_classes = (MultiPartParser, FormParser)
|
||||
permission_classes = (IsGuestUpload, )
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_class = ArchiveFilter
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
# ! upload-token protection:
|
||||
@@ -244,3 +248,9 @@ class TicketViewSet(viewsets.ModelViewSet):
|
||||
lookup_field = 'number'
|
||||
serializer_class = TicketSerializer
|
||||
permission_classes = (IsAuthenticated, )
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
|
||||
filterset_class = TicketFilter
|
||||
search_fields = ['number']
|
||||
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(user=self.request.user)
|
||||
|
Reference in New Issue
Block a user