62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
from openslides.utils.autoupdate import inform_changed_data
|
|
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, allow_null=True
|
|
)
|
|
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(skip_autoupdate=True)
|
|
topic.attachments.add(*attachments)
|
|
inform_changed_data(topic)
|
|
return topic
|