customerwebsitebackend/products/views.py
2026-08-16 14:56:22 +05:30

54 lines
2.3 KiB
Python

from rest_framework import generics, permissions
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Category, Product
from .serializers import CategorySerializer, ProductSerializer
from django.db.models import Q
class CategoryListView(generics.ListAPIView):
queryset = Category.objects.filter(is_active=True)
serializer_class = CategorySerializer
permission_classes = [permissions.AllowAny]
class ProductListView(generics.ListAPIView):
serializer_class = ProductSerializer
permission_classes = [permissions.AllowAny]
def get_queryset(self):
# Fetch approved supplier IDs from sellerprofile database
from django.db import connections
approved_supplier_ids = []
try:
with connections['sellerprofile'].cursor() as cursor:
cursor.execute("SELECT user_id FROM api_supplierprofile WHERE status = 'approved'")
approved_supplier_ids = [row[0] for row in cursor.fetchall()]
except Exception as e:
print("Error fetching approved suppliers:", e)
queryset = Product.objects.filter(supplier_id__in=approved_supplier_ids, status='approved', is_active=True)
category_slug = self.request.query_params.get('category', None)
search_query = self.request.query_params.get('search', None)
if category_slug:
queryset = queryset.filter(category__slug=category_slug)
if search_query:
queryset = queryset.filter(
Q(title__icontains=search_query) |
Q(description__icontains=search_query)
)
return queryset
class ProductDetailView(generics.RetrieveAPIView):
serializer_class = ProductSerializer
permission_classes = [permissions.AllowAny]
def get_queryset(self):
from django.db import connections
approved_supplier_ids = []
try:
with connections['sellerprofile'].cursor() as cursor:
cursor.execute("SELECT user_id FROM api_supplierprofile WHERE status = 'approved'")
approved_supplier_ids = [row[0] for row in cursor.fetchall()]
except Exception as e:
print("Error fetching approved suppliers:", e)
return Product.objects.filter(supplier_id__in=approved_supplier_ids, status='approved', is_active=True)