diff --git a/program/serializers.py b/program/serializers.py index 6b4b37672ea024ccd9d27c85afc96d99cc101825..b17d3681c987072f06814f40240228d0962149ef 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -693,18 +693,25 @@ class NoteLinkSerializer(serializers.ModelSerializer): fields = ("type", "url") -class NoteSerializer(ThumbnailsMixin, serializers.ModelSerializer): +class NoteSerializer(serializers.ModelSerializer): + contributors = serializers.PrimaryKeyRelatedField(queryset=Host.objects.all(), many=True) + image = serializers.PrimaryKeyRelatedField(queryset=Image.objects.all(), required=False) links = NoteLinkSerializer(many=True, required=False) timeslot = serializers.PrimaryKeyRelatedField(queryset=TimeSlot.objects.all()) - contributors = serializers.PrimaryKeyRelatedField(queryset=Host.objects.all(), many=True) - thumbnails = serializers.SerializerMethodField() class Meta: model = Note + read_only_fields = ( + "created_at", + "created_by", + "updated_at", + "updated_by", + ) fields = ( "cba_id", "content", "contributors", + "image", "links", "owner", "playlist", @@ -714,35 +721,18 @@ class NoteSerializer(ThumbnailsMixin, serializers.ModelSerializer): "thumbnails", "timeslot", "title", - # ModelWithImageFields - "image", - "image_alt_text", - "image_credits", - "image_height", - "image_ppoi", - "image_width", - # ModelWithCreatedUpdatedFields - "created_at", - "created_by", - "updated_at", - "updated_by", - ) - read_only_fields = ( - "created_at", - "created_by", - "updated_at", - "updated_by", - ) + ) + read_only_fields def create(self, validated_data): """Create and return a new Note instance, given the validated data.""" + links_data = validated_data.pop("links", []) contributors = validated_data.pop("contributors", []) # the creator of the note is the owner validated_data["owner"] = self.context["user_id"] - note = Note.objects.create(**validated_data) + note = Note.objects.create(**validated_data | self.context) # created_by note.contributors.set(contributors) @@ -769,32 +759,29 @@ class NoteSerializer(ThumbnailsMixin, serializers.ModelSerializer): def update(self, instance, validated_data): """Update and return an existing Note instance, given the validated data.""" + instance.cba_id = validated_data.get("cba_id", instance.cba_id) + instance.content = validated_data.get("content", instance.content) + instance.image = validated_data.get("image", instance.image) instance.show = validated_data.get("show", instance.show) - instance.timeslot = validated_data.get("timeslot", instance.timeslot) - instance.title = validated_data.get("title", instance.title) instance.slug = validated_data.get("slug", instance.slug) instance.summary = validated_data.get("summary", instance.summary) - instance.content = validated_data.get("content", instance.content) - instance.image = validated_data.get("image", instance.image) - instance.image_ppoi = validated_data.get("image_ppoi", instance.image_ppoi) - instance.image_credits = validated_data.get("image_credits", instance.image_credits) - instance.image_alt_text = validated_data.get("image_alt_text", instance.image_alt_text) - instance.cba_id = validated_data.get("cba_id", instance.cba_id) + instance.timeslot = validated_data.get("timeslot", instance.timeslot) + instance.title = validated_data.get("title", instance.title) instance.contributors.set(validated_data.get("contributors", instance.contributors)) - if instance.links.count() > 0: - for link in instance.links.all(): - link.delete(keep_parents=True) - if cba_id := validated_data.get("cba_id"): if audio_url := get_audio_url(cba_id): NoteLink.objects.create(note=instance, type="CBA", url=audio_url) if links_data := validated_data.get("links"): + instance = delete_links(instance) + for link_data in links_data: NoteLink.objects.create(note=instance, **link_data) + instance.updated_by = self.context.get("updated_by") + instance.save() # Remove existing note connections from timeslots