Browse Source

certificate admin views and serializers added

master
Mohsen Taba 2 months ago
parent
commit
ec6db0baef
  1. 15
      apps/certificate/serializers.py
  2. 9
      apps/certificate/urls.py
  3. 40
      apps/certificate/views.py

15
apps/certificate/serializers.py

@ -47,4 +47,19 @@ class CertificateRequestSerializer(serializers.ModelSerializer):
return Certificate.objects.create(student=user, course=course)
class AdminCertificateSerializer(serializers.ModelSerializer):
student_name = serializers.CharField(source='student.fullname', read_only=True)
student_email = serializers.CharField(source='student.email', read_only=True)
course_title = serializers.CharField(source='course.title', read_only=True)
class Meta:
model = Certificate
fields = [
'id', 'student', 'student_name', 'student_email',
'course', 'course_title', 'status', 'certificate_file',
'created_at', 'updated_at'
]

9
apps/certificate/urls.py

@ -1,11 +1,14 @@
from django.urls import path
from .views import CertificateRequestView, UserCertificatesListView
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import CertificateRequestView, UserCertificatesListView, AdminCertificateViewSet
router = DefaultRouter()
router.register(r'admin/certificates', AdminCertificateViewSet, basename='admin-certificates')
urlpatterns = [
path('', include(router.urls)),
path('request/', CertificateRequestView.as_view(), name='certificate-request'),
path('my-certificates/', UserCertificatesListView.as_view(), name='user-certificates'),
]

40
apps/certificate/views.py

@ -53,4 +53,44 @@ class UserCertificatesListView(generics.ListAPIView):
def get_queryset(self):
return Certificate.objects.filter(student=self.request.user).order_by('-created_at')
from rest_framework.viewsets import ModelViewSet
from rest_framework.permissions import IsAdminUser
from apps.certificate.serializers import AdminCertificateSerializer
from django.db.models import Q
class AdminCertificateViewSet(ModelViewSet):
queryset = Certificate.objects.all()
serializer_class = AdminCertificateSerializer
permission_classes = [permissions.IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
def get_queryset(self):
queryset = Certificate.objects.all().select_related('student', 'course')
# Search query
search_query = self.request.query_params.get('search', None)
if search_query:
queryset = queryset.filter(
Q(student__fullname__icontains=search_query) |
Q(student__email__icontains=search_query) |
Q(course__title__icontains=search_query)
)
# Filters
status_param = self.request.query_params.get('status', None)
if status_param:
queryset = queryset.filter(status=status_param)
course_id = self.request.query_params.get('course', None)
if course_id:
queryset = queryset.filter(course_id=course_id)
student_id = self.request.query_params.get('student', None)
if student_id:
queryset = queryset.filter(student_id=student_id)
return queryset.order_by('-created_at')
Loading…
Cancel
Save