add from v002
This commit is contained in:
72
001.BACKEND/fleet/views.py
Normal file
72
001.BACKEND/fleet/views.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from rest_framework import viewsets, filters
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from .models import Stroj, Vozilo
|
||||
from .serializers import (
|
||||
VoziloSerializer,
|
||||
VoziloListaSerializer,
|
||||
VoziloDetaljiSerializer,
|
||||
StrojSerializer
|
||||
)
|
||||
|
||||
class StrojViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
ViewSet za pregled, kreiranje i uređivanje strojeva i dizalica.
|
||||
"""
|
||||
# select_related radi SQL JOIN i povlači podatke o kupcu odmah
|
||||
queryset = Stroj.objects.all().select_related('vlasnik').prefetch_related('radni_nalozi')
|
||||
serializer_class = StrojSerializer
|
||||
|
||||
# Dodajemo mogućnosti filtriranja, pretrage i sortiranja
|
||||
filter_backends = [
|
||||
DjangoFilterBackend,
|
||||
filters.SearchFilter,
|
||||
filters.OrderingFilter
|
||||
]
|
||||
|
||||
# Omogućuje filtriranje strojeva po vlasniku ili tipu
|
||||
# npr. /api/strojevi/?vlasnik=1 ili /api/strojevi/?tip=dizalica_auto
|
||||
filterset_fields = ['vlasnik', 'tip']
|
||||
|
||||
# Omogućuje pretragu po nazivu, marki ili serijskom broju
|
||||
search_fields = ['naziv', 'marka', 'serijski_broj', 'registracija']
|
||||
|
||||
# Omogućuje sortiranje po radnim satima ili godini proizvodnje
|
||||
ordering_fields = ['radni_sati', 'godina_proizvodnje', 'datum_zadnjeg_atesta']
|
||||
ordering = ['-datum_zadnjeg_atesta'] # Defaultno prikazuje one koji su zadnji atestirani
|
||||
|
||||
class VoziloViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
ViewSet za pregled, kreiranje i uređivanje voznog parka.
|
||||
Usklađen sa StrojViewSet arhitekturom.
|
||||
"""
|
||||
queryset = Vozilo.objects.all()
|
||||
|
||||
# Postavljanje filter backenda (isto kao u StrojViewSet)
|
||||
filter_backends = [
|
||||
DjangoFilterBackend,
|
||||
filters.SearchFilter,
|
||||
filters.OrderingFilter
|
||||
]
|
||||
|
||||
# Omogućuje filtriranje vozila po statusu
|
||||
# npr. /api/fleet/vozila/?status=u_radu
|
||||
filterset_fields = ['status']
|
||||
|
||||
# Omogućuje pretragu po nazivu i registraciji
|
||||
search_fields = ['naziv', 'registracija']
|
||||
|
||||
# Omogućuje sortiranje po kilometrima ili statusu
|
||||
ordering_fields = ['trenutni_kilometri', 'status']
|
||||
ordering = ['naziv'] # Defaultno sortiranje po abecedi naziva
|
||||
|
||||
def get_serializer_class(self):
|
||||
"""
|
||||
Dinamički odabir serializera za optimalne performanse.
|
||||
"""
|
||||
if self.action == 'list':
|
||||
return VoziloListaSerializer
|
||||
if self.action == 'retrieve':
|
||||
return VoziloDetaljiSerializer
|
||||
|
||||
# Default za POST/PUT/PATCH
|
||||
return VoziloSerializer
|
||||
Reference in New Issue
Block a user