from openslides.utils.rest_api import CharField, IntegerField, ModelSerializer from openslides.utils.validate import validate_html from .models import Topic class TopicSerializer(ModelSerializer): """ Serializer for core.models.Topic objects. """ agenda_type = IntegerField(write_only=True, required=False, min_value=1, max_value=3) agenda_parent_id = IntegerField(write_only=True, required=False, min_value=1) agenda_comment = CharField(write_only=True, required=False, allow_blank=True) agenda_duration = IntegerField(write_only=True, required=False, min_value=1) agenda_weight = IntegerField(write_only=True, required=False, min_value=1) class Meta: model = Topic fields = ( 'id', 'title', 'text', 'attachments', 'agenda_item_id', 'agenda_type', 'agenda_parent_id', 'agenda_comment', 'agenda_duration', 'agenda_weight', ) def validate(self, data): if 'text' in data: data['text'] = validate_html(data['text']) return data def create(self, validated_data): """ Customized create method. Set information about related agenda item into agenda_item_update_information container. """ agenda_type = validated_data.pop('agenda_type', None) agenda_parent_id = validated_data.pop('agenda_parent_id', None) agenda_comment = validated_data.pop('agenda_comment', None) agenda_duration = validated_data.pop('agenda_duration', None) agenda_weight = validated_data.pop('agenda_weight', None) attachments = validated_data.pop('attachments', []) topic = Topic(**validated_data) topic.agenda_item_update_information['type'] = agenda_type topic.agenda_item_update_information['parent_id'] = agenda_parent_id topic.agenda_item_update_information['comment'] = agenda_comment topic.agenda_item_update_information['duration'] = agenda_duration topic.agenda_item_update_information['weight'] = agenda_weight topic.save() topic.attachments.add(*attachments) return topic