|
|
|
@ -1,6 +1,6 @@ |
|
|
|
from rest_framework import serializers |
|
|
|
|
|
|
|
from .models import Video, VideoCategory, VideoCollection |
|
|
|
from .models import Video, VideoCategory, VideoCollection, VideoPlaylist, PlaylistItem |
|
|
|
from .serializers_admin import AbsoluteFileField, AbsoluteImageField |
|
|
|
|
|
|
|
|
|
|
|
@ -50,6 +50,8 @@ class DovodiVideoItemSerializer(serializers.ModelSerializer): |
|
|
|
video_file = AbsoluteFileField(required=False, allow_null=True) |
|
|
|
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) |
|
|
|
remove_video_file = serializers.BooleanField(write_only=True, required=False, default=False) |
|
|
|
playlist = serializers.IntegerField(required=False, allow_null=True, write_only=True) |
|
|
|
playlist_id = serializers.SerializerMethodField(read_only=True) |
|
|
|
|
|
|
|
class Meta: |
|
|
|
model = Video |
|
|
|
@ -65,12 +67,18 @@ class DovodiVideoItemSerializer(serializers.ModelSerializer): |
|
|
|
"video_time", |
|
|
|
"status", |
|
|
|
"view_count", |
|
|
|
"playlist", |
|
|
|
"playlist_id", |
|
|
|
"created_at", |
|
|
|
"updated_at", |
|
|
|
"remove_thumbnail", |
|
|
|
"remove_video_file", |
|
|
|
] |
|
|
|
read_only_fields = ["id", "view_count", "created_at", "updated_at"] |
|
|
|
read_only_fields = ["id", "view_count", "playlist_id", "created_at", "updated_at"] |
|
|
|
|
|
|
|
def get_playlist_id(self, obj): |
|
|
|
appearance = obj.playlist_appearances.first() |
|
|
|
return appearance.playlist_id if appearance else None |
|
|
|
|
|
|
|
def validate(self, attrs): |
|
|
|
video_type = attrs.get("video_type", getattr(self.instance, "video_type", None)) |
|
|
|
@ -96,9 +104,17 @@ class DovodiVideoItemSerializer(serializers.ModelSerializer): |
|
|
|
return attrs |
|
|
|
|
|
|
|
def create(self, validated_data): |
|
|
|
playlist_id = validated_data.pop("playlist", None) |
|
|
|
validated_data.pop("remove_thumbnail", False) |
|
|
|
validated_data.pop("remove_video_file", False) |
|
|
|
return super().create(validated_data) |
|
|
|
instance = super().create(validated_data) |
|
|
|
if playlist_id: |
|
|
|
try: |
|
|
|
playlist = VideoPlaylist.objects.get(id=playlist_id) |
|
|
|
PlaylistItem.objects.create(playlist=playlist, video=instance, priority=playlist.playlist_items.count() + 1) |
|
|
|
except VideoPlaylist.DoesNotExist: |
|
|
|
pass |
|
|
|
return instance |
|
|
|
|
|
|
|
def update(self, instance, validated_data): |
|
|
|
remove_thumbnail = validated_data.pop("remove_thumbnail", False) |
|
|
|
@ -112,4 +128,18 @@ class DovodiVideoItemSerializer(serializers.ModelSerializer): |
|
|
|
instance.video_file.delete(save=False) |
|
|
|
instance.video_file = None |
|
|
|
|
|
|
|
return super().update(instance, validated_data) |
|
|
|
playlist_in_payload = "playlist" in self.initial_data |
|
|
|
playlist_id = validated_data.pop("playlist", None) |
|
|
|
|
|
|
|
instance = super().update(instance, validated_data) |
|
|
|
|
|
|
|
if playlist_in_payload: |
|
|
|
instance.playlist_appearances.all().delete() |
|
|
|
if playlist_id: |
|
|
|
try: |
|
|
|
playlist = VideoPlaylist.objects.get(id=playlist_id) |
|
|
|
PlaylistItem.objects.create(playlist=playlist, video=instance, priority=playlist.playlist_items.count() + 1) |
|
|
|
except VideoPlaylist.DoesNotExist: |
|
|
|
pass |
|
|
|
|
|
|
|
return instance |