OpenSlides/openslides/topics/models.py

81 lines
2.2 KiB
Python
Raw Normal View History

2018-08-22 22:00:08 +02:00
from typing import Any, Dict
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
from ..agenda.models import Item
from ..mediafiles.models import Mediafile
from ..utils.models import RESTModelMixin
from .access_permissions import TopicAccessPermissions
class TopicManager(models.Manager):
2016-09-30 20:42:58 +02:00
"""
Customized model manager to support our get_full_queryset method.
"""
2019-01-06 16:22:33 +01:00
2016-09-30 20:42:58 +02:00
def get_full_queryset(self):
"""
Returns the normal queryset with all topics. In the background all
attachments and the related agenda item are prefetched from the
database.
"""
2019-01-06 16:22:33 +01:00
return self.get_queryset().prefetch_related("attachments", "agenda_items")
class Topic(RESTModelMixin, models.Model):
"""
Model for slides with custom content. Used to be called custom slide.
"""
2019-01-06 16:22:33 +01:00
access_permissions = TopicAccessPermissions()
2016-09-30 20:42:58 +02:00
objects = TopicManager()
title = models.CharField(max_length=256)
text = models.TextField(blank=True)
attachments = models.ManyToManyField(Mediafile, blank=True)
2016-09-30 20:42:58 +02:00
# In theory there could be one then more agenda_item. But we support only
# one. See the property agenda_item.
2019-01-06 16:22:33 +01:00
agenda_items = GenericRelation(Item, related_name="topics")
class Meta:
default_permissions = ()
def __str__(self):
return self.title
"""
Container for runtime information for agenda app (on create or update of this instance).
"""
2018-08-22 22:00:08 +02:00
agenda_item_update_information: Dict[str, Any] = {}
@property
def agenda_item(self):
"""
Returns the related agenda item.
"""
2016-09-30 20:42:58 +02:00
# We support only one agenda item so just return the first element of
# the queryset.
return self.agenda_items.all()[0]
@property
def agenda_item_id(self):
"""
Returns the id of the agenda item object related to this object.
"""
return self.agenda_item.pk
def get_agenda_title(self):
"""
Returns the title for the agenda.
"""
return self.title
def get_agenda_title_with_type(self):
"""
Returns the agenda title. Topicy should not get a type postfix.
"""
return self.get_agenda_title()