Move common functions into Wagtail superclass
This commit is contained in:
parent
2157d4e630
commit
2f52f67b64
|
|
@ -1,8 +1,10 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-14 14:08
|
||||
# Generated by Django 2.0.6 on 2018-08-16 15:24
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import wagtail.core.blocks
|
||||
import wagtail.core.fields
|
||||
import wagtail.images.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
@ -10,7 +12,7 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('wagtailimages', '0020_add-verbose-name'),
|
||||
('wagtailimages', '0021_image_file_hash'),
|
||||
('wagtailcore', '0040_page_draft_title'),
|
||||
]
|
||||
|
||||
|
|
@ -37,6 +39,19 @@ class Migration(migrations.Migration):
|
|||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ContentBlock',
|
||||
fields=[
|
||||
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||
('contents', wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('url', wagtail.core.blocks.URLBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.RichTextBlock())], icon='download')), ('image_block', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))], blank=True, null=True)),
|
||||
('type', models.CharField(choices=[('plain', 'Normal'), ('yellow', 'Gelb'), ('green', 'Grün'), ('blue', 'Blau')], max_length=100)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Inhaltsblock',
|
||||
'verbose_name_plural': 'Inhaltsblöcke',
|
||||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Module',
|
||||
fields=[
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-15 08:45
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import wagtail.core.blocks
|
||||
import wagtail.core.fields
|
||||
import wagtail.images.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wagtailcore', '0040_page_draft_title'),
|
||||
('book', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ContentBlock',
|
||||
fields=[
|
||||
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||
('contents', wagtail.core.fields.StreamField([('text', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('modal_content', wagtail.core.blocks.RichTextBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.CharBlock())], icon='download')), ('image', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))])),
|
||||
('type', models.CharField(choices=[('plain', 'Normal'), ('yellow', 'Gelb'), ('green', 'Grün'), ('blue', 'Blau')], max_length=100)),
|
||||
],
|
||||
options={
|
||||
'verbose_name_plural': 'Inhaltsblöcke',
|
||||
'verbose_name': 'Inhaltsblock',
|
||||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-15 13:49
|
||||
|
||||
from django.db import migrations
|
||||
import wagtail.core.blocks
|
||||
import wagtail.core.fields
|
||||
import wagtail.images.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('book', '0002_contentblock'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contentblock',
|
||||
name='contents',
|
||||
field=wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('modal_content', wagtail.core.blocks.RichTextBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.CharBlock())], icon='download')), ('image', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))], blank=True, null=True),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-15 16:29
|
||||
|
||||
from django.db import migrations
|
||||
import wagtail.core.blocks
|
||||
import wagtail.core.fields
|
||||
import wagtail.images.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('book', '0003_auto_20180815_1349'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contentblock',
|
||||
name='contents',
|
||||
field=wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('modal_content', wagtail.core.blocks.RichTextBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.CharBlock())], icon='download')), ('image_block', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))], blank=True, null=True),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,12 +1,13 @@
|
|||
import logging
|
||||
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
|
||||
from wagtail.core.models import Page
|
||||
|
||||
from core.wagtail_utils import StrictHierarchyPage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Book(Page):
|
||||
class Book(StrictHierarchyPage):
|
||||
class Meta:
|
||||
verbose_name = 'Buch'
|
||||
verbose_name_plural = 'Bücher'
|
||||
|
|
@ -27,6 +28,3 @@ class Book(Page):
|
|||
template = 'generic_page.html'
|
||||
|
||||
subpage_types = ['book.Topic']
|
||||
|
||||
def get_child_ids(self):
|
||||
return self.get_children().values_list('id', flat=True)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
import logging
|
||||
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
|
||||
ObjectList
|
||||
from wagtail.core.models import Page
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
|
||||
|
||||
from core.wagtail_utils import StrictHierarchyPage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Chapter(Page):
|
||||
class Chapter(StrictHierarchyPage):
|
||||
class Meta:
|
||||
verbose_name = 'Kapitel'
|
||||
verbose_name_plural = 'Kapitel'
|
||||
|
|
@ -30,9 +30,3 @@ class Chapter(Page):
|
|||
parent_page_types = ['book.Module']
|
||||
subpage_types = ['book.ContentBlock']
|
||||
|
||||
def get_child_ids(self):
|
||||
return self.get_children().values_list('id', flat=True)
|
||||
|
||||
@classmethod
|
||||
def get_module_chapters(cls, module):
|
||||
return cls.objects.filter(id__in=module.get_child_ids()).live()
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
import logging
|
||||
|
||||
from django.db import models
|
||||
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
|
||||
ObjectList, StreamFieldPanel
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList, StreamFieldPanel
|
||||
from wagtail.core.fields import StreamField
|
||||
from wagtail.core.models import Page
|
||||
from wagtail.images.blocks import ImageChooserBlock
|
||||
|
||||
from book.blocks import TextBlock, ModalTextBlock, StudentEntryBlock
|
||||
from core.wagtail_utils import StrictHierarchyPage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ContentBlock(Page):
|
||||
class ContentBlock(StrictHierarchyPage):
|
||||
class Meta:
|
||||
verbose_name = 'Inhaltsblock'
|
||||
verbose_name_plural = 'Inhaltsblöcke'
|
||||
|
|
@ -55,6 +53,3 @@ class ContentBlock(Page):
|
|||
|
||||
parent_page_types = ['book.Chapter']
|
||||
|
||||
@classmethod
|
||||
def get_chapter_content_blocks(cls, chapter):
|
||||
return cls.objects.filter(id__in=chapter.get_child_ids()).live()
|
||||
|
|
|
|||
|
|
@ -1,18 +1,17 @@
|
|||
import logging
|
||||
|
||||
from django.db import models
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
|
||||
ObjectList
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
|
||||
from wagtail.core.fields import RichTextField
|
||||
from wagtail.core.models import Page
|
||||
from wagtail.images.edit_handlers import ImageChooserPanel
|
||||
|
||||
from book.blocks import DEFAULT_RICH_TEXT_FEATURES
|
||||
from core.wagtail_utils import StrictHierarchyPage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Module(Page):
|
||||
class Module(StrictHierarchyPage):
|
||||
class Meta:
|
||||
verbose_name = 'Modul'
|
||||
verbose_name_plural = 'Module'
|
||||
|
|
@ -57,7 +56,3 @@ class Module(Page):
|
|||
|
||||
def get_child_ids(self):
|
||||
return self.get_children().values_list('id', flat=True)
|
||||
|
||||
@classmethod
|
||||
def get_topic_modules(cls, topic):
|
||||
return cls.objects.filter(id__in=topic.get_child_ids()).live()
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
import logging
|
||||
|
||||
from django.db import models
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
|
||||
ObjectList
|
||||
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
|
||||
from wagtail.core.fields import RichTextField
|
||||
from wagtail.core.models import Page
|
||||
|
||||
from book.blocks import DEFAULT_RICH_TEXT_FEATURES
|
||||
from core.wagtail_utils import StrictHierarchyPage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Topic(Page):
|
||||
class Topic(StrictHierarchyPage):
|
||||
class Meta:
|
||||
verbose_name = 'Thema'
|
||||
verbose_name_plural = 'Themen'
|
||||
|
|
@ -40,10 +39,3 @@ class Topic(Page):
|
|||
|
||||
parent_page_types = ['book.Book']
|
||||
subpage_types = ['book.Module']
|
||||
|
||||
def get_child_ids(self):
|
||||
return self.get_children().values_list('id', flat=True)
|
||||
|
||||
@classmethod
|
||||
def get_book_topics(cls, book):
|
||||
return cls.objects.filter(id__in=book.get_child_ids()).live()
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ class ChapterNode(DjangoObjectType):
|
|||
interfaces = (relay.Node,)
|
||||
|
||||
def resolve_content_blocks(self, *args, **kwargs):
|
||||
return ContentBlock.get_chapter_content_blocks(self)
|
||||
return ContentBlock.get_by_parent(self)
|
||||
|
||||
|
||||
class ModuleNode(DjangoObjectType):
|
||||
|
|
@ -59,7 +59,7 @@ class ModuleNode(DjangoObjectType):
|
|||
return self.hero_image.file.url
|
||||
|
||||
def resolve_chapters(self, *args, **kwargs):
|
||||
return Chapter.get_module_chapters(self)
|
||||
return Chapter.get_by_parent(self)
|
||||
|
||||
|
||||
class TopicNode(DjangoObjectType):
|
||||
|
|
@ -81,7 +81,7 @@ class TopicNode(DjangoObjectType):
|
|||
return self.id
|
||||
|
||||
def resolve_modules(self, *args, **kwargs):
|
||||
return Module.get_topic_modules(self)
|
||||
return Module.get_by_parent(self)
|
||||
|
||||
|
||||
class BookNode(DjangoObjectType):
|
||||
|
|
@ -103,7 +103,7 @@ class BookNode(DjangoObjectType):
|
|||
return self.id
|
||||
|
||||
def resolve_topics(self, *args, **kwargs):
|
||||
return Topic.get_book_topics(self)
|
||||
return Topic.get_by_parent(self)
|
||||
|
||||
|
||||
class BookQuery(object):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,17 @@
|
|||
from django.contrib import admin
|
||||
from wagtail.core.models import Page
|
||||
|
||||
|
||||
class StrictHierarchyPage(Page):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def get_child_ids(self):
|
||||
return self.get_children().values_list('id', flat=True)
|
||||
|
||||
@classmethod
|
||||
def get_by_parent(cls, parent):
|
||||
return cls.objects.filter(id__in=parent.get_child_ids()).live()
|
||||
|
||||
|
||||
def wagtail_parent_filter(parent_cls, child_cls):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-14 14:08
|
||||
# Generated by Django 2.0.6 on 2018-08-16 15:24
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
|
@ -10,8 +9,6 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('book', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
@ -31,8 +28,6 @@ class Migration(migrations.Migration):
|
|||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(blank=True, max_length=255, verbose_name='title')),
|
||||
('module', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='book.Module')),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Lernziel Gruppe',
|
||||
|
|
@ -45,16 +40,10 @@ class Migration(migrations.Migration):
|
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('done', models.BooleanField(default=False, verbose_name='Lernziel erledigt?')),
|
||||
('objective', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='objectives.Objective')),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Lernzielstatus',
|
||||
'verbose_name_plural': 'Lernzielstatus',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='objective',
|
||||
name='group',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='objectives.ObjectiveGroup'),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-16 15:24
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('book', '0001_initial'),
|
||||
('objectives', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='objectiveprogressstatus',
|
||||
name='user',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='objectivegroup',
|
||||
name='module',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='book.Module'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='objectivegroup',
|
||||
name='user',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='objective',
|
||||
name='group',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='objectives.ObjectiveGroup'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 2.0.6 on 2018-08-14 12:41
|
||||
# Generated by Django 2.0.6 on 2018-08-16 15:24
|
||||
|
||||
import django.contrib.auth.models
|
||||
import django.contrib.auth.validators
|
||||
|
|
|
|||
Loading…
Reference in New Issue