import logging from datetime import datetime from django.db import models from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList from wagtail.core.fields import RichTextField from wagtail.images.edit_handlers import ImageChooserPanel from books.blocks import DEFAULT_RICH_TEXT_FEATURES from core.wagtail_utils import StrictHierarchyPage from users.models import SchoolClass logger = logging.getLogger(__name__) class Module(StrictHierarchyPage): class Meta: verbose_name = 'Modul' verbose_name_plural = 'Module' meta_title = models.CharField( max_length=255, help_text='e.g. \'Intro\' or \'Modul 1\'' ) hero_image = models.ForeignKey( 'wagtailimages.Image', null=True, blank=True, on_delete=models.SET_NULL, related_name='+' ) teaser = models.TextField() intro = RichTextField(features=DEFAULT_RICH_TEXT_FEATURES) solutions_enabled_for = models.ManyToManyField(SchoolClass) content_panels = [ FieldPanel('title', classname="full title"), FieldPanel('meta_title', classname="full title"), ImageChooserPanel('hero_image'), FieldPanel('teaser'), FieldPanel('intro'), ] settings_panels = [ FieldPanel('slug') ] edit_handler = TabbedInterface([ ObjectList(content_panels, heading='Content'), ObjectList(settings_panels, heading='Settings'), ]) template = 'generic_page.html' parent_page_types = ['books.Topic'] subpage_types = ['books.Chapter'] def get_child_ids(self): return self.get_children().values_list('id', flat=True) class RecentModule(models.Model): module = models.ForeignKey(Module, on_delete=models.CASCADE, related_name='recent_modules') user = models.ForeignKey('users.User', on_delete=models.CASCADE) visited = models.DateTimeField(default=datetime.now) class Meta: get_latest_by = 'visited'