Files
web2.0-backend/webapp/serializers.py
T
2019-10-10 18:38:45 +03:00

124 lines
3.5 KiB
Python

from rest_framework import serializers
from webapp.models import *
class SignupFormSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = SignupForm
fields = ('id', 'title', 'start_time', 'end_time', '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', 'location', '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):
tag_id = serializers.PrimaryKeyRelatedField(
many=True,
source="tags",
queryset=Tag.objects.all()
)
class Meta:
model = Feed
fields = ('id', 'tags', 'tag_id', 'visible', 'title', 'description',
'content', 'publish_time', 'autohide', 'autohide_enabled')
depth = 1
def create(self, validated_data):
tags_data = validated_data.pop('tags')
feed = Feed.objects.create(**validated_data)
for tag in tags_data:
feed.tags.add(tag)
feed.save()
return feed
class CommitteeSerializer(serializers.ModelSerializer):
class Meta:
model = Committee
fields = ['name']
class RoleSerializer(serializers.ModelSerializer):
committee = CommitteeSerializer(read_only=True)
class Meta:
model = Role
fields = ('name', 'description', 'committee')
class ContactsSerializer(serializers.ModelSerializer):
class Meta:
model = Official
fields = ('first_name', 'last_name', 'email', 'phone_number')
depth = 2
class OccupationSerializer(serializers.ModelSerializer):
role = RoleSerializer(read_only=True)
officials = ContactsSerializer(many=True, read_only=True)
class Meta:
model = Occupation
fields = ('role', 'start_date', 'end_date', 'officials')