2 Commits

Author SHA1 Message Date
2c82691166 Merge pull request 'Enhance Certificate model and serializer to support file uploads and URL generation' (#92) from certificate into main
All checks were successful
Deploy to Production / build-and-deploy (push) Successful in 4m27s
Reviewed-on: #92
2026-04-23 13:05:27 +00:00
komoliddin
7a88e39b96 Enhance Certificate model and serializer to support file uploads and URL generation 2026-04-23 18:04:09 +05:00
3 changed files with 31 additions and 5 deletions

View File

@@ -1,11 +1,21 @@
from django.db import models
from django_core.models import AbstractBaseModel
from model_bakery import baker
from django.utils.translation import gettext_lazy as _
from model_bakery import baker
class CertificateModel(AbstractBaseModel):
title = models.CharField(verbose_name=_("title"), max_length=255, blank=False, null=False)
file_url = models.URLField(verbose_name=_("file url"), max_length=255, blank=False, null=False)
title = models.CharField(
verbose_name=_("title"),
max_length=255
)
file = models.FileField(
verbose_name=_("file"),
upload_to="certificates/",
blank=True,
null=True
)
def __str__(self):
return self.title

View File

@@ -1,12 +1,25 @@
from rest_framework import serializers
from core.apps.evaluation.models import CertificateModel
class BaseCertificateSerializer(serializers.ModelSerializer):
file_url = serializers.SerializerMethodField()
class Meta:
model = CertificateModel
fields = [
"id",
"title",
"file_url"
]
"file",
"file_url",
]
def get_file_url(self, obj):
request = self.context.get("request")
if obj.file:
if request:
return request.build_absolute_uri(obj.file.url)
return obj.file.url
return None

View File

@@ -5,6 +5,7 @@ from rest_framework.viewsets import ModelViewSet
from core.apps.evaluation.models import CertificateModel
from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer
from rest_framework.filters import SearchFilter
from rest_framework.parsers import MultiPartParser, FormParser
@extend_schema(tags=["Certificate"])
class CertificateView(BaseViewSetMixin, ModelViewSet):
@@ -12,6 +13,8 @@ class CertificateView(BaseViewSetMixin, ModelViewSet):
serializer_class = BaseCertificateSerializer
permission_classes = [IsAuthenticated]
parser_classes = [MultiPartParser, FormParser]
filter_backends = [SearchFilter]
search_fields = ["title"]