Files
e-trznice/backend/product/views.py
2025-10-02 00:54:34 +02:00

51 lines
2.0 KiB
Python

from rest_framework import viewsets
from django.db import models
from .models import Product, EventProduct
from .serializers import ProductSerializer, EventProductSerializer
from rest_framework.permissions import IsAuthenticated
from account.permissions import RoleAllowed
from rest_framework import viewsets, filters
from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema
@extend_schema(
tags=["Product"],
description="Seznam produktů, jejich vytváření a úprava. Produkty lze filtrovat a třídit dle názvu nebo kódu."
)
class ProductViewSet(viewsets.ModelViewSet):
queryset = (
Product.objects.all()
.prefetch_related(
models.Prefetch(
'event_products',
queryset=EventProduct.objects.select_related('event').all(),
to_attr='event_products_all'
)
)
.order_by("name")
)
serializer_class = ProductSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
filterset_fields = ["code"]
ordering_fields = ["name", "code"]
search_fields = ["name", "code", "event_products__event__name"]
permission_classes = [RoleAllowed("admin", "squareManager")]
@extend_schema(
tags=["EventProduct"],
description="Propojení produktů s událostmi. Zde se nastavují data prodeje konkrétního produktu na konkrétní události."
)
class EventProductViewSet(viewsets.ModelViewSet):
# queryset = EventProduct.objects.select_related("product", "event").all().order_by("start_selling_date")
queryset = EventProduct.objects.select_related("product").order_by("start_selling_date")
serializer_class = EventProductSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
filterset_fields = ["product", "event"]
ordering_fields = ["start_selling_date", "end_selling_date"]
search_fields = ["product__name", "event__name"]
permission_classes = [RoleAllowed("admin", "squareManager")]