vbv/server/vbv_lernwelt/media_library/models.py

65 lines
2.2 KiB
Python

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'
)