57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
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=2)
|
|
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
|