Enhance Certificate model and serializer to support file uploads and URL generation
This commit is contained in:
@@ -1,11 +1,21 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django_core.models import AbstractBaseModel
|
from django_core.models import AbstractBaseModel
|
||||||
from model_bakery import baker
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from model_bakery import baker
|
||||||
|
|
||||||
|
|
||||||
class CertificateModel(AbstractBaseModel):
|
class CertificateModel(AbstractBaseModel):
|
||||||
title = models.CharField(verbose_name=_("title"), max_length=255, blank=False, null=False)
|
title = models.CharField(
|
||||||
file_url = models.URLField(verbose_name=_("file url"), max_length=255, blank=False, null=False)
|
verbose_name=_("title"),
|
||||||
|
max_length=255
|
||||||
|
)
|
||||||
|
|
||||||
|
file = models.FileField(
|
||||||
|
verbose_name=_("file"),
|
||||||
|
upload_to="certificates/",
|
||||||
|
blank=True,
|
||||||
|
null=True
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|||||||
@@ -1,12 +1,25 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from core.apps.evaluation.models import CertificateModel
|
from core.apps.evaluation.models import CertificateModel
|
||||||
|
|
||||||
|
|
||||||
class BaseCertificateSerializer(serializers.ModelSerializer):
|
class BaseCertificateSerializer(serializers.ModelSerializer):
|
||||||
|
file_url = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CertificateModel
|
model = CertificateModel
|
||||||
fields = [
|
fields = [
|
||||||
"id",
|
"id",
|
||||||
"title",
|
"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
|
||||||
@@ -5,6 +5,7 @@ from rest_framework.viewsets import ModelViewSet
|
|||||||
from core.apps.evaluation.models import CertificateModel
|
from core.apps.evaluation.models import CertificateModel
|
||||||
from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer
|
from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer
|
||||||
from rest_framework.filters import SearchFilter
|
from rest_framework.filters import SearchFilter
|
||||||
|
from rest_framework.parsers import MultiPartParser, FormParser
|
||||||
|
|
||||||
@extend_schema(tags=["Certificate"])
|
@extend_schema(tags=["Certificate"])
|
||||||
class CertificateView(BaseViewSetMixin, ModelViewSet):
|
class CertificateView(BaseViewSetMixin, ModelViewSet):
|
||||||
@@ -12,6 +13,8 @@ class CertificateView(BaseViewSetMixin, ModelViewSet):
|
|||||||
serializer_class = BaseCertificateSerializer
|
serializer_class = BaseCertificateSerializer
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
parser_classes = [MultiPartParser, FormParser]
|
||||||
|
|
||||||
filter_backends = [SearchFilter]
|
filter_backends = [SearchFilter]
|
||||||
search_fields = ["title"]
|
search_fields = ["title"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user