Initial commit from ZIP
This commit is contained in:
commit
378d4692a9
454 files changed
+40367
No files matched your search
@@ -0,0 +1,99 @@
|
||||
from django.http import HttpResponseRedirect
|
||||
from rest_framework import serializers
|
||||
from rest_framework.permissions import AllowAny
|
||||
|
||||
from outbo.apps.core.viewsets import (
|
||||
AutoPermissionViewSetMixin,
|
||||
RetrieveModelMixin,
|
||||
MultipleSerializerViewSet,
|
||||
PartialUpdateModelMixin,
|
||||
DestroyModelMixin,
|
||||
)
|
||||
from outbo.apps.final_photobriefing.enums import PhotoType
|
||||
from outbo.apps.final_photobriefing.models import FinalBrief, FinalBriefPhoto
|
||||
|
||||
|
||||
class FinalBriefPhotoSerializer:
|
||||
class List(serializers.ModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(
|
||||
view_name="final_photobriefing:finalbriefphoto-detail"
|
||||
)
|
||||
type = serializers.SerializerMethodField()
|
||||
filename = serializers.ReadOnlyField()
|
||||
|
||||
class Meta:
|
||||
model = FinalBriefPhoto
|
||||
fields = ["url", "type", "filename"]
|
||||
|
||||
def get_type(self, instance):
|
||||
t, val = instance.type.split(".", 1)
|
||||
return PhotoType[val].value
|
||||
|
||||
class Create(serializers.ModelSerializer):
|
||||
type = serializers.CharField()
|
||||
|
||||
class Meta:
|
||||
model = FinalBriefPhoto
|
||||
fields = ["type", "file"]
|
||||
|
||||
def validate_type(self, value):
|
||||
try:
|
||||
return PhotoType(value)
|
||||
except ValueError:
|
||||
raise serializers.ValidationError("Invalid photo type value")
|
||||
|
||||
|
||||
class BaseFinalBriefSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = FinalBrief
|
||||
|
||||
|
||||
class FinalBriefSerializer:
|
||||
class Retrieve(BaseFinalBriefSerializer):
|
||||
photos = FinalBriefPhotoSerializer.List(many=True)
|
||||
|
||||
class Meta(BaseFinalBriefSerializer.Meta):
|
||||
fields = ["photos", "created_at", "updated_at"]
|
||||
|
||||
class Update(BaseFinalBriefSerializer):
|
||||
photos = FinalBriefPhotoSerializer.Create(many=True)
|
||||
|
||||
class Meta(BaseFinalBriefSerializer.Meta):
|
||||
fields = ["photos"]
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
photos = validated_data.pop("photos", None)
|
||||
if photos is not None:
|
||||
for photo in photos:
|
||||
FinalBriefPhoto.objects.create(brief=instance, **photo)
|
||||
return instance
|
||||
|
||||
|
||||
class FinalBriefViewSet(
|
||||
AutoPermissionViewSetMixin,
|
||||
RetrieveModelMixin,
|
||||
PartialUpdateModelMixin,
|
||||
MultipleSerializerViewSet,
|
||||
):
|
||||
queryset = FinalBrief.objects.all()
|
||||
serializer_class_set = FinalBriefSerializer
|
||||
|
||||
|
||||
class FinalBriefPhotoViewSet(
|
||||
AutoPermissionViewSetMixin,
|
||||
RetrieveModelMixin,
|
||||
DestroyModelMixin,
|
||||
MultipleSerializerViewSet,
|
||||
):
|
||||
queryset = FinalBriefPhoto.objects.all()
|
||||
serializer_class_set = FinalBriefPhotoSerializer
|
||||
retrieve_permission_classes = [AllowAny]
|
||||
|
||||
def get_permissions(self):
|
||||
if self.action == "retrieve":
|
||||
return [permission() for permission in self.retrieve_permission_classes]
|
||||
return super().get_permissions()
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
photo = self.get_object()
|
||||
return HttpResponseRedirect(redirect_to=photo.file.url)
|
||||
Reference in new issue
Block a user