From cfdceeed515a3fa9603f3c9f93ed71ec277714b7 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Mon, 31 Jan 2022 12:57:03 -0400 Subject: [PATCH] Add LinkSerializer and modify HostSerializer to handle nested links --- program/serializers.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/program/serializers.py b/program/serializers.py index 483d1cdc..b6098d2a 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -26,7 +26,7 @@ from rest_framework import serializers from profile.models import Profile from profile.serializers import ProfileSerializer from program.models import Show, Schedule, TimeSlot, Category, FundingCategory, Host, Topic, MusicFocus, Note, Type, Language, \ - RRule + RRule, Link from steering.settings import THUMBNAIL_SIZES @@ -111,7 +111,14 @@ class CategorySerializer(serializers.ModelSerializer): return instance +class LinkSerializer(serializers.ModelSerializer): + class Meta: + model = Link + fields = ('description', 'url') + + class HostSerializer(serializers.ModelSerializer): + links = LinkSerializer(many=True) thumbnails = serializers.SerializerMethodField() # Read-only @staticmethod @@ -129,6 +136,15 @@ class HostSerializer(serializers.ModelSerializer): model = Host fields = '__all__' + def create(self, validated_data): + links_data = validated_data.pop('links') + host = Host.objects.create(**validated_data) + + for link_data in links_data: + Link.objects.create(host=host, **link_data) + host.save() + return host + def update(self, instance, validated_data): """ Update and return an existing Host instance, given the validated data. @@ -142,7 +158,14 @@ class HostSerializer(serializers.ModelSerializer): instance.image = validated_data.get('image', instance.image) instance.ppoi = validated_data.get('ppoi', instance.ppoi) + for link in instance.links.all(): + link.delete(keep_parents=True) + + for link_data in validated_data.get('links'): + Link.objects.create(host=instance, **link_data) + instance.save() + return instance -- GitLab