from rest_framework import serializers from webapp.models import * class SignupFormSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = SignupForm fields = ('id', 'start', 'end', 'questions') class EventSerializer(serializers.HyperlinkedModelSerializer): signupForm = SignupFormSerializer(many=True, read_only=True, required=False) signup_id = serializers.PrimaryKeyRelatedField( many=True, source="signupForm", queryset=SignupForm.objects.all() ) tag_id = serializers.PrimaryKeyRelatedField( many=True, source="tags", queryset=Tag.objects.all() ) class Meta: model = Event fields = ('id', 'tag_id', 'tags', 'visible', 'title', 'description', 'content', 'start_time', 'end_time', 'signup_id', 'signupForm') depth = 1 def create(self, validated_data): signupForms = validated_data.pop('signupForm') tags = validated_data.pop('tags') event = Event.objects.create(**validated_data) for form in signupForms: event.signupForm.add(form) for tag in tags: event.tags.add(tag) event.save() return event def update(self, instance, validated_data): signupForms = validated_data.pop('signupForm') instance = super(EventSerializer, self).update(instance, validated_data) instance.signupForm.clear() for form_data in signupForms: # form_qs = SignupForms.objects.filter(id=form['id']) instance.signupForm.add(form_data) return instance class SignupSerializer(serializers.ModelSerializer): class Meta: model = Signup fields = ('id', 'signupForm', 'answer') extra_kwargs = { 'url': { 'view_name': 'signup-detail', } } class SavedQuestionsSerializer(serializers.ModelSerializer): class Meta: model = TemplateQuestion fields = ('id', 'name', 'question') class TagSerializer(serializers.ModelSerializer): class Meta: model = Tag fields = ('id', 'slug', 'name', 'icon') class FeedSerializer(serializers.ModelSerializer): # tags = TagSerializer(many=True, read_only=False) # tags = serializers.PrimaryKeyRelatedField( # many=True, # queryset=Tag.objects.all(), # read_only=False # ) class Meta: model = Feed fields = ('tags', 'visible', 'title', 'description', 'content', 'publish_time', 'autohide') def create(self, validated_data): print("validated data: ", validated_data) tags_data = validated_data.pop('tags') feed = Feed.objects.create(**validated_data) for tag in tags_data: print(tag) feed.tags.add(tag) feed.save() return feed class ContactsSerializer(serializers.ModelSerializer): class Meta: model = Official fields = ('id', 'first_name', 'last_name', 'phone_number', 'role') depth = 2