35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from rest_framework import viewsets, filters
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from .models import Kupac
|
|
from .serializers import KupacSerializer, KupacDetaljiSerializer, KupacListaSerializer
|
|
|
|
class KupacViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint koji omogućuje pregled, pretragu i uređivanje kupaca.
|
|
"""
|
|
# Optimizacija: prefetch_related smanjuje broj upita jer odmah vuče strojeve
|
|
queryset = Kupac.objects.all().prefetch_related('strojevi')
|
|
serializer_class = KupacSerializer
|
|
|
|
# Dodajemo filter backende
|
|
filter_backends = [
|
|
DjangoFilterBackend,
|
|
filters.SearchFilter,
|
|
filters.OrderingFilter
|
|
]
|
|
|
|
# 1. Točno filtriranje (npr. ?tip=pravno)
|
|
filterset_fields = ['tip', 'aktivno', 'grad']
|
|
|
|
# 2. Pretraga (npr. ?search=gradnja)
|
|
# Pretražuje naziv ili OIB
|
|
search_fields = ['naziv', 'oib']
|
|
|
|
# 3. Sortiranje (npr. ?ordering=-datum_kreiranja)
|
|
ordering_fields = ['naziv', 'datum_kreiranja']
|
|
ordering = ['naziv'] # Defaultno sortiranje
|
|
|
|
def get_serializer_class(self):
|
|
if self.action == 'retrieve': # Ako se gleda pojedinačni kupac
|
|
return KupacDetaljiSerializer # Onaj s ugniježđenim strojevima
|
|
return KupacListaSerializer # Obični bez strojeva |