Source code for ls.joyous.models.groups

# ------------------------------------------------------------------------------
# Joyous Groups
# ------------------------------------------------------------------------------
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.db import models
from django.utils.translation import gettext_lazy as _
from wagtail.core.models import Page
from wagtail.core.fields import RichTextField
from wagtail.admin.edit_handlers import FieldPanel

# ------------------------------------------------------------------------------
# Events can belong to groups
# by default joyous.GroupPage, but also designed to work with goatherd.GroupPage
# But we don't want a dependency on ls.goatherd, so make this settable
# ------------------------------------------------------------------------------
[docs]def get_group_model_string(): """ Get the dotted ``app.Model`` name for the group model as a string. Useful for developers that need to refer to the group model, such as in foreign keys, but the model itself is not required. """ return getattr(settings, "JOYOUS_GROUP_MODEL", "joyous.GroupPage")
[docs]def get_group_model(): """ Get the group model from the ``JOYOUS_GROUP_MODEL`` setting. Useful for developers that need the group model. Defaults to the standard :class:`ls.joyous.models.GroupPage` model if no custom model is defined. """ from django.apps import apps model_string = get_group_model_string() try: return apps.get_model(model_string) except ValueError: raise ImproperlyConfigured("JOYOUS_GROUP_MODEL must be of the form 'app_label.model_name'") except LookupError: raise ImproperlyConfigured( "JOYOUS_GROUP_MODEL refers to model '%s' that has not been installed" % model_string )
# ------------------------------------------------------------------------------ # GroupPage # ------------------------------------------------------------------------------
[docs]class GroupPage(Page): class Meta: verbose_name = _("group page") verbose_name_plural = _("group pages") # Define page_ptr so the related_name doesn't clash page_ptr = models.OneToOneField(Page, on_delete=models.CASCADE, related_name="%(app_label)s_%(model_name)s", parent_link=True) subpage_types = ['joyous.SimpleEventPage', 'joyous.MultidayEventPage', 'joyous.RecurringEventPage', 'joyous.MultidayRecurringEventPage'] content = RichTextField(_("content"), default='', blank=True) content.help_text = _("An area of text for whatever you like") content_panels = Page.content_panels + [ FieldPanel('content', classname="full"), ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def get_context(self, request, *args, **kwargs): retval = super().get_context(request, *args, **kwargs) retval['themeCSS'] = getattr(settings, "JOYOUS_THEME_CSS", "") return retval
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------