add from v002

This commit is contained in:
2026-05-20 21:24:00 +02:00
parent 1a6ba86d0b
commit 83fb8c69bb
98 changed files with 10878 additions and 0 deletions

View 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