diff --git a/program/serializers.py b/program/serializers.py index 97ceb541f5b76e79970bca42032799003c048a09..ea70b69b4e178382c129e0b673a45e99eda6d25f 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -736,13 +736,6 @@ class ScheduleDryRunResponseSerializer(serializers.Serializer): class TimeSlotSerializer(serializers.ModelSerializer): - language_ids = serializers.PrimaryKeyRelatedField( - allow_null=True, - many=True, - queryset=Language.objects.all(), - required=False, - source="language", - ) note_id = serializers.SerializerMethodField() show_id = serializers.SerializerMethodField() schedule_id = serializers.PrimaryKeyRelatedField( @@ -753,9 +746,6 @@ class TimeSlotSerializer(serializers.ModelSerializer): queryset=TimeSlot.objects.all(), required=False, ) - topic_ids = serializers.PrimaryKeyRelatedField( - allow_null=True, many=True, queryset=Topic.objects.all(), required=False, source="topic" - ) class Meta: model = TimeSlot @@ -768,11 +758,9 @@ class TimeSlotSerializer(serializers.ModelSerializer): "start", ) fields = ( - "language_ids", "memo", "playlist_id", "repetition_of_id", - "topic_ids", ) + read_only_fields @staticmethod @@ -791,11 +779,6 @@ class TimeSlotSerializer(serializers.ModelSerializer): instance.repetition_of = validated_data.get("repetition_of_id", instance.repetition_of) instance.playlist_id = validated_data.get("playlist_id", instance.playlist_id) - if language := validated_data.get("language", []): - instance.language.set(language) - - if topic := validated_data.get("topic", []): - instance.topic.set(topic) instance.save() return instance @@ -822,12 +805,22 @@ class NoteSerializer(serializers.ModelSerializer): image_id = serializers.PrimaryKeyRelatedField( queryset=Image.objects.all(), required=False, allow_null=True ) + language_ids = serializers.PrimaryKeyRelatedField( + allow_null=True, + many=True, + queryset=Language.objects.all(), + required=False, + source="language", + ) links = NoteLinkSerializer(many=True, required=False) playlist_id = serializers.IntegerField(required=False) tags = JSONSchemaField(tags_json_schema, required=False) timeslot_id = serializers.PrimaryKeyRelatedField( queryset=TimeSlot.objects.all(), required=False ) + topic_ids = serializers.PrimaryKeyRelatedField( + allow_null=True, many=True, queryset=Topic.objects.all(), required=False, source="topic" + ) class Meta: model = Note @@ -844,6 +837,7 @@ class NoteSerializer(serializers.ModelSerializer): "contributor_ids", "id", "image_id", + "language_ids", "links", "owner_id", "playlist_id", @@ -852,6 +846,7 @@ class NoteSerializer(serializers.ModelSerializer): "tags", "timeslot_id", "title", + "topic_ids", ) + read_only_fields def create(self, validated_data): @@ -867,8 +862,11 @@ class NoteSerializer(serializers.ModelSerializer): timeslot_pk = TimeSlot.objects.get(pk=self.context["request"].path.split("/")[-3]) validated_data["timeslot"] = validated_data.pop("timeslot_id", timeslot_pk) - show_owners = validated_data["timeslot"].schedule.show.owners.values_list("id", flat=True) - contributors = validated_data.pop("contributors", show_owners) + show = validated_data["timeslot"].schedule.show + + contributors = validated_data.pop("contributors", show.owners.values_list("id", flat=True)) + language = validated_data.pop("language", show.language.values_list("id", flat=True)) + topic = validated_data.pop("topic", show.topic.values_list("id", flat=True)) # optional validated_data["image"] = validated_data.pop("image_id", None) @@ -881,6 +879,8 @@ class NoteSerializer(serializers.ModelSerializer): ) note.contributors.set(contributors) + note.language.set(language) + note.topic.set(topic) if cba_id := validated_data.get("cba_id"): if audio_url := get_audio_url(cba_id): @@ -918,6 +918,12 @@ class NoteSerializer(serializers.ModelSerializer): for link_data in links_data: NoteLink.objects.create(note=instance, **link_data) + if language := validated_data.get("language", []): + instance.language.set(language) + + if topic := validated_data.get("topic", []): + instance.topic.set(topic) + instance.updated_by = self.context.get("request").user.username instance.save()