Browse Source

podcasts serializer and api updated

master
Mohsen Taba 3 days ago
parent
commit
9265d3a141
  1. 2
      apps/podcast/models.py
  2. 38
      apps/podcast/serializers_dovodi.py

2
apps/podcast/models.py

@ -1,6 +1,7 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.conf import settings from django.conf import settings
import datetime
from utils import generate_slug_for_model from utils import generate_slug_for_model
from utils.mixins import LowercaseSlugMixin from utils.mixins import LowercaseSlugMixin
@ -119,7 +120,6 @@ class Podcast(LowercaseSlugMixin, models.Model):
file_changed = True file_changed = True
if not self.audio_time: if not self.audio_time:
import datetime
self.audio_time = datetime.time(0, 0, 0) self.audio_time = datetime.time(0, 0, 0)
super().save(*args, **kwargs) super().save(*args, **kwargs)

38
apps/podcast/serializers_dovodi.py

@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Podcast, PodcastCategory, PodcastCollection
from .models import Podcast, PodcastCategory, PodcastCollection, PodcastPlaylist, PlaylistItem
from .serializers_admin import AbsoluteFileField, AbsoluteImageField from .serializers_admin import AbsoluteFileField, AbsoluteImageField
@ -50,6 +50,8 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer):
audio_file = AbsoluteFileField(required=False, allow_null=True) audio_file = AbsoluteFileField(required=False, allow_null=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
remove_audio_file = serializers.BooleanField(write_only=True, required=False, default=False) remove_audio_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: class Meta:
model = Podcast model = Podcast
@ -64,17 +66,31 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer):
"status", "status",
"view_count", "view_count",
"download_count", "download_count",
"playlist",
"playlist_id",
"created_at", "created_at",
"updated_at", "updated_at",
"remove_thumbnail", "remove_thumbnail",
"remove_audio_file", "remove_audio_file",
] ]
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"]
read_only_fields = ["id", "view_count", "download_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 create(self, validated_data): def create(self, validated_data):
playlist_id = validated_data.pop("playlist", None)
validated_data.pop("remove_thumbnail", False) validated_data.pop("remove_thumbnail", False)
validated_data.pop("remove_audio_file", False) validated_data.pop("remove_audio_file", False)
return super().create(validated_data)
instance = super().create(validated_data)
if playlist_id:
try:
playlist = PodcastPlaylist.objects.get(id=playlist_id)
PlaylistItem.objects.create(playlist=playlist, podcast=instance, priority=playlist.playlist_items.count() + 1)
except PodcastPlaylist.DoesNotExist:
pass
return instance
def update(self, instance, validated_data): def update(self, instance, validated_data):
remove_thumbnail = validated_data.pop("remove_thumbnail", False) remove_thumbnail = validated_data.pop("remove_thumbnail", False)
@ -88,4 +104,18 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer):
instance.audio_file.delete(save=False) instance.audio_file.delete(save=False)
instance.audio_file = None instance.audio_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 = PodcastPlaylist.objects.get(id=playlist_id)
PlaylistItem.objects.create(playlist=playlist, podcast=instance, priority=playlist.playlist_items.count() + 1)
except PodcastPlaylist.DoesNotExist:
pass
return instance
Loading…
Cancel
Save