skillbox/server/basicknowledge/models.py

106 lines
3.2 KiB
Python

from django.db import models
from django.utils.text import slugify
from wagtail.admin.panels import FieldPanel, StreamFieldPanel
from wagtail.fields import RichTextField, StreamField
from wagtail.images.blocks import ImageChooserBlock
from books.blocks import CMSDocumentBlock, DocumentBlock, GeniallyBlock, InfogramBlock, InstrumentTextBlock, LinkBlock, \
SectionTitleBlock, \
SubtitleBlock, ThinglinkBlock, VideoBlock
from core.constants import DEFAULT_RICH_TEXT_FEATURES
from core.wagtail_utils import StrictHierarchyPage
from django.utils.translation import ugettext_lazy as _
LANGUAGE_COMMUNICATION = 'language_communication'
SOCIETY = 'society'
INTERDISCIPLINARY = 'interdisciplinary'
LANGUAGE_COMMUNICATION_LABEL = 'Sprache & Kommunikation'
SOCIETY_LABEL = 'Gesellschaft'
INTERDISCIPLINARY_LABEL = 'Überfachliche Instrumente'
class InstrumentCategory(models.Model):
name = models.CharField(max_length=255, unique=True)
background = models.CharField('background color', max_length=7)
foreground = models.CharField('foreground color', max_length=7)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = _('instrument categories')
verbose_name = _('instrument category')
def default_category():
return InstrumentCategory.objects.first().pk
class InstrumentType(models.Model):
class Meta:
verbose_name = _('instrument type')
verbose_name_plural = _('instrument types')
CATEGORY_CHOICES = (
(LANGUAGE_COMMUNICATION, LANGUAGE_COMMUNICATION_LABEL),
(SOCIETY, SOCIETY_LABEL),
(INTERDISCIPLINARY, INTERDISCIPLINARY_LABEL),
)
name = models.CharField(max_length=255, unique=True)
category = models.ForeignKey(
InstrumentCategory,
on_delete=models.PROTECT,
null=False,
default=default_category,
related_name='instrument_types'
)
@property
def type(self):
return slugify(self.name.lower())
def __str__(self):
return self.type
class BasicKnowledge(StrictHierarchyPage):
class Meta:
verbose_name = _('instrument')
verbose_name_plural = _('instruments')
parent_page_types = ['books.book']
intro = RichTextField(features=DEFAULT_RICH_TEXT_FEATURES, default='', blank=True)
contents = StreamField([
('text_block', InstrumentTextBlock()),
('image_block', ImageChooserBlock()),
('link_block', LinkBlock()),
('video_block', VideoBlock()),
('document_block', DocumentBlock()),
('section_title', SectionTitleBlock()),
('infogram_block', InfogramBlock()),
('genially_block', GeniallyBlock()),
('thinglink_block', ThinglinkBlock()),
('subtitle', SubtitleBlock()),
('cms_document_block', CMSDocumentBlock()),
], null=True, blank=True)
new_type = models.ForeignKey(InstrumentType, null=True, on_delete=models.PROTECT, related_name='instruments')
old_type = models.CharField(
max_length=100,
choices=InstrumentType.CATEGORY_CHOICES,
blank=True
)
content_panels = [
FieldPanel('title', classname="full title"),
FieldPanel('new_type'),
FieldPanel('intro'),
StreamFieldPanel('contents')
]