from django.db import models from django.utils.text import slugify from wagtail import fields from wagtail.admin.panels import FieldPanel, StreamFieldPanel from wagtail.documents.models import AbstractDocument, Document from wagtail.models import Page from vbv_lernwelt.core.model_utils import find_available_slug from vbv_lernwelt.media_library.content_blocks import MediaContentCollection class MediaLibraryPage(Page): parent_page_types = ['course.CoursePage'] subpage_types = ['media_library.MediaCategoryPage'] content_panels = [ FieldPanel('title', classname="full title"), ] def full_clean(self, *args, **kwargs): self.slug = find_available_slug(slugify(f"{self.get_parent().slug}-media", allow_unicode=True)) super(MediaLibraryPage, self).full_clean(*args, **kwargs) class MediaCategoryPage(Page): """ Handlungsfeld. zB. Fahrzeug """ course_category = models.ForeignKey('course.CourseCategory', on_delete=models.CASCADE) parent_page_types = ['media_library.MediaLibraryPage'] introduction_text = models.TextField(default='') description = fields.RichTextField(default='') body = fields.StreamField( [('content_collection', MediaContentCollection())], use_json_field=True, null=True ) content_panels = [ FieldPanel('title', classname="full title"), FieldPanel('course_category'), FieldPanel('introduction_text', classname="introduction text"), FieldPanel('description', classname="introduction text"), StreamFieldPanel('body') ] def full_clean(self, *args, **kwargs): self.slug = find_available_slug(slugify(f"{self.get_parent()}-cat-{self.title}", allow_unicode=True)) super(MediaCategoryPage, self).full_clean(*args, **kwargs) class LibraryDocument(AbstractDocument): # Todo: check https://filepreviews.io/ # Custom field example: display_text = models.CharField(max_length=1024, default='') description = models.TextField(default='') link_display_text = models.CharField(max_length=1024, default='') thumbnail = models.URLField() admin_form_fields = Document.admin_form_fields + ( 'display_text', 'description', 'link_display_text', 'thumbnail' )