Refactor data model

This commit is contained in:
Daniel Egger 2022-06-01 15:35:26 +02:00
parent a2044470ca
commit 4a2d049969
9 changed files with 90 additions and 188 deletions

View File

@ -13,6 +13,7 @@
}, },
"dependencies": { "dependencies": {
"axios": "^0.26.1", "axios": "^0.26.1",
"loglevel": "^1.8.0",
"pinia": "^2.0.13", "pinia": "^2.0.13",
"vue": "^3.2.31", "vue": "^3.2.31",
"vue-i18n": "^9.1.9", "vue-i18n": "^9.1.9",

View File

@ -1,5 +1,7 @@
<script> <script>
import axios from 'axios'; import axios from 'axios';
import * as log from 'loglevel';
import MainNavigationBar from '../components/MainNavigationBar.vue'; import MainNavigationBar from '../components/MainNavigationBar.vue';
import LearningSequence from '../components/circle/LearningSequence.vue'; import LearningSequence from '../components/circle/LearningSequence.vue';
@ -13,11 +15,12 @@ export default {
} }
}, },
mounted() { mounted() {
console.log('CircleAnalyseExampleView mounted', this.circleSlug); log.debug('CircleAnalyseExampleView mounted', this.circleSlug);
axios({ axios({
method: 'get', method: 'get',
url: `/wagtailapi/v2/pages/?type=learnpath.Circle&slug=${this.circleSlug}&fields=title,description,learning_sequences(title,learning_packages(title,my_title,learning_units(title)))`, url: `/wagtailapi/v2/pages/?type=learnpath.Circle&slug=${this.circleSlug}&fields=title,description,learning_sequences(title,learning_packages(title,my_title,learning_units(title)))`,
}).then((response) => { }).then((response) => {
log.debug(response.data.items[0]);
this.circleData = response.data.items[0]; this.circleData = response.data.items[0];
}); });
} }

View File

@ -1,4 +1,4 @@
# Generated by Django 3.2.12 on 2022-05-30 13:51 # Generated by Django 3.2.12 on 2022-06-01 13:32
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
@ -51,18 +51,6 @@ class Migration(migrations.Migration):
}, },
bases=('wagtailcore.page',), bases=('wagtailcore.page',),
), ),
migrations.CreateModel(
name='LearningPackage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('title', models.CharField(default='', max_length=256)),
],
options={
'ordering': ['sort_order'],
'abstract': False,
},
),
migrations.CreateModel( migrations.CreateModel(
name='LearningPath', name='LearningPath',
fields=[ fields=[
@ -73,6 +61,18 @@ class Migration(migrations.Migration):
}, },
bases=('wagtailcore.page',), bases=('wagtailcore.page',),
), ),
migrations.CreateModel(
name='LearningSequence',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('title', models.CharField(default='', max_length=256)),
('circle', modelcluster.fields.ParentalKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_sequences', to='learnpath.circle')),
],
options={
'verbose_name': 'Learning Sequence',
},
),
migrations.CreateModel( migrations.CreateModel(
name='Topic', name='Topic',
fields=[ fields=[
@ -92,31 +92,13 @@ class Migration(migrations.Migration):
('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')), ('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')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)), ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('contents', wagtail.core.fields.StreamField([('web_based_training', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())])), ('video', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())]))], blank=True, null=True)), ('contents', wagtail.core.fields.StreamField([('web_based_training', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())])), ('video', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())]))], blank=True, null=True)),
('learning_package', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_units', to='learnpath.learningpackage')), ('learning_sequence', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_units', to='learnpath.learningsequence')),
], ],
options={ options={
'verbose_name': 'Learning Unit', 'verbose_name': 'Learning Unit',
}, },
bases=('wagtailcore.page', models.Model), bases=('wagtailcore.page', models.Model),
), ),
migrations.CreateModel(
name='LearningSequence',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('title', models.CharField(default='', max_length=256)),
('category', models.CharField(choices=[('INCIRCLE', 'In Circle'), ('START', 'Start'), ('END', 'End')], default='INCIRCLE', max_length=16)),
('circle', modelcluster.fields.ParentalKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_sequences', to='learnpath.circle')),
],
options={
'verbose_name': 'Learning Sequence',
},
),
migrations.AddField(
model_name='learningpackage',
name='learning_sequence',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_packages', to='learnpath.learningsequence'),
),
migrations.CreateModel( migrations.CreateModel(
name='FullfillmentCriteria', name='FullfillmentCriteria',
fields=[ fields=[

View File

@ -0,0 +1,17 @@
# Generated by Django 3.2.12 on 2022-06-01 14:18
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('learnpath', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='learningunit',
name='sort_order',
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 3.2.12 on 2022-06-01 14:40
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('learnpath', '0002_remove_learningunit_sort_order'),
]
operations = [
migrations.RemoveField(
model_name='circle',
name='sort_order',
),
]

View File

@ -1,13 +1,12 @@
# Create your models here. # Create your models here.
from collections import OrderedDict
from django.utils.text import slugify from django.utils.text import slugify
from grapple.helpers import register_query_field from grapple.helpers import register_query_field
from wagtail.api import APIField from wagtail.api import APIField
from wagtail.core.blocks import StreamBlock from wagtail.core.blocks import StreamBlock
from wagtail.core.fields import StreamField from wagtail.core.fields import StreamField
from wagtail.core.models import Page, Orderable from wagtail.core.models import Page, Orderable
from wagtail.snippets.models import register_snippet
from vbv_lernwelt.learnpath.models_competences import * from vbv_lernwelt.learnpath.models_competences import *
from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock
@ -60,7 +59,6 @@ class Topic(Orderable):
# parent_page_types = ['learnpath.LearningPath'] # parent_page_types = ['learnpath.LearningPath']
# subpage_types = ['learnpath.Circle'] # subpage_types = ['learnpath.Circle']
def full_clean(self, *args, **kwargs): def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(Topic, slugify(self.title, allow_unicode=True)) self.slug = find_available_slug(Topic, slugify(self.title, allow_unicode=True))
super(Topic, self).full_clean(*args, **kwargs) super(Topic, self).full_clean(*args, **kwargs)
@ -72,9 +70,10 @@ class Topic(Orderable):
return f"{self.title}" return f"{self.title}"
class Circle(Page, Orderable): class Circle(Page):
description = models.TextField(default="", blank=True) description = models.TextField(default="", blank=True)
goals = models.TextField(default="", blank=True) goals = models.TextField(default="", blank=True)
topic = models.ForeignKey( topic = models.ForeignKey(
'learnpath.Topic', 'learnpath.Topic',
null=True, null=True,
@ -83,7 +82,7 @@ class Circle(Page, Orderable):
related_name='circles' related_name='circles'
) )
parent_page_types = ['learnpath.Learningpath'] parent_page_types = ['learnpath.LearningPath']
subpage_types = ['learnpath.LearningUnit'] subpage_types = ['learnpath.LearningUnit']
content_panels = Page.content_panels + [ content_panels = Page.content_panels + [
@ -92,41 +91,13 @@ class Circle(Page, Orderable):
InlinePanel('learning_sequences', label="Learning Sequences"), InlinePanel('learning_sequences', label="Learning Sequences"),
] ]
# Export fields over the API
api_fields = [ api_fields = [
APIField('title'), APIField('title'),
APIField('description'), APIField('description'),
APIField('topic'), APIField('topic'),
APIField('learning_sequences'), APIField('learning_sequences'),
# APIField('content_structure'),
] ]
@property
def content_structure(self):
# FIXME: not needed!?
# you can access nested content with the following url scheme (look a the nested parentheses!):
# /wagtailapi/v2/pages/?type=learnpath.Circle&slug=analyse&fields=title,description,learning_sequences(title,learning_packages(title,my_title,learning_units(title)))
learning_sequences = LearningSequence.objects.filter(circle_id=self.id).values()
learning_packages = LearningPackage.objects.filter(learning_sequence__circle_id=self.id).values()
learning_units = LearningUnit.objects.filter(learning_package__learning_sequence__circle_id=self.id).values('learning_package_id', 'title')
content = OrderedDict()
content['learning_sequences'] = []
for learning_sequence in learning_sequences:
this_learning_packages = []
related_learning_packages = [lp for lp in learning_packages if lp['learning_sequence_id'] == learning_sequence['id']]
for learning_package in related_learning_packages:
related_learning_units = [lu for lu in learning_units if
lu['learning_package_id'] == learning_package['id']]
this_learning_units = [learning_unit for learning_unit in related_learning_units]
learning_package['learning_units'] = this_learning_units
this_learning_packages.append(learning_package)
learning_sequence['learning_packages'] = this_learning_packages
content['learning_sequences'].append(learning_sequence)
return content
def full_clean(self, *args, **kwargs): def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True)) self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True))
super(Circle, self).full_clean(*args, **kwargs) super(Circle, self).full_clean(*args, **kwargs)
@ -138,21 +109,10 @@ class Circle(Page, Orderable):
return f"{self.title}" return f"{self.title}"
IN_CIRCLE = 'INCIRCLE' @register_snippet
START = 'START'
END = 'END'
LEARNING_SEQUENCE_CATEGORIES = [
(IN_CIRCLE, 'In Circle'),
(START, 'Start'),
(END, 'End')
]
class LearningSequence(Orderable): class LearningSequence(Orderable):
# TODO: How to do a icon choice field? # TODO: How to do a icon choice field?
title = models.CharField(max_length=256, default='') title = models.CharField(max_length=256, default='')
category = models.CharField(max_length=16, choices=LEARNING_SEQUENCE_CATEGORIES, default=IN_CIRCLE)
circle = ParentalKey( circle = ParentalKey(
'learnpath.Circle', 'learnpath.Circle',
@ -162,7 +122,7 @@ class LearningSequence(Orderable):
related_name='learning_sequences', related_name='learning_sequences',
) )
panels = [FieldPanel('title'), FieldPanel('category'), FieldPanel('circle')] panels = [FieldPanel('title'), FieldPanel('circle')]
api_fields = [ api_fields = [
APIField('title'), APIField('title'),
@ -177,46 +137,18 @@ class LearningSequence(Orderable):
return f"{self.title}" return f"{self.title}"
def full_clean(self, *args, **kwargs): def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(LearningSequence, slugify(self.title, allow_unicode=True))
super(LearningSequence, self).full_clean(*args, **kwargs) super(LearningSequence, self).full_clean(*args, **kwargs)
class LearningPackage(Orderable): class LearningUnit(Page):
title = models.CharField(max_length=256, default='')
learning_sequence = models.ForeignKey(
'learnpath.LearningSequence',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='learning_packages',
)
panels = [FieldPanel('title')]
api_fields = [
APIField('title'),
APIField('my_title'),
APIField('learning_units'),
]
@property
def my_title(self):
return self.title
def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(LearningPackage, slugify(self.title, allow_unicode=True))
super(LearningPackage, self).full_clean(*args, **kwargs)
class LearningUnit(Page, Orderable):
""" """
This is a group of contents, with the übung and test it is one unit. ... more of a structural charactacter. This is a group of contents, with the übung and test it is one unit. ... more of a structural charactacter.
""" """
# TODO: Review model architecture, is the stream field the right thing here? # TODO: Review model architecture, is the stream field the right thing here?
parent_page_types = ['learnpath.Circle'] parent_page_types = ['learnpath.Circle']
learning_package = models.ForeignKey( learning_sequence = models.ForeignKey(
'learnpath.LearningPackage', 'learnpath.LearningSequence',
null=True, null=True,
blank=True, blank=True,
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
@ -228,12 +160,13 @@ class LearningUnit(Page, Orderable):
('video', VideoBlock()), ('video', VideoBlock()),
] ]
contents = StreamField(StreamBlock(content_blocks), contents = StreamField(
null=True, blank=True, min_num=1, max_num=1) StreamBlock(content_blocks), null=True, blank=True, min_num=1, max_num=1
)
content_panels = [ content_panels = [
FieldPanel('title', classname="full title"), FieldPanel('title', classname="full title"),
FieldPanel('learning_package'), FieldPanel('learning_sequence'),
StreamFieldPanel('contents'), StreamFieldPanel('contents'),
] ]
@ -256,7 +189,6 @@ class LearningUnit(Page, Orderable):
return f"{self.title}" return f"{self.title}"
def find_available_slug(model, requested_slug, ignore_page_id=None): def find_available_slug(model, requested_slug, ignore_page_id=None):
""" """
Finds an available slug within the specified parent. Finds an available slug within the specified parent.

View File

@ -1,12 +1,10 @@
from django.db import models from django.db import models
from wagtail.core import blocks from wagtail.core import blocks
from wagtail.api import APIField
# 'video_block'
class VideoBlock(blocks.StructBlock): class VideoBlock(blocks.StructBlock):
# TODO: Possible video Types for the user, upload file, add URL # TODO: Possible video Types for the user, upload file, add URL
title = models.CharField(max_length=128, default="") title = models.CharField(max_length=255, default="")
description = models.TextField(default="") description = models.TextField(default="")
url = blocks.URLBlock() url = blocks.URLBlock()
@ -23,12 +21,11 @@ CONTENT_TYPE_CHOICES = (
(RISE, 'Rise'), (RISE, 'Rise'),
) )
# 'Web based training Block'
class WebBasedTrainingBlock(blocks.StructBlock):
class WebBasedTrainingBlock(blocks.StructBlock):
url = blocks.URLBlock() url = blocks.URLBlock()
content_type = models.CharField( content_type = models.CharField(
max_length=100, max_length=255,
choices=CONTENT_TYPE_CHOICES, choices=CONTENT_TYPE_CHOICES,
default=RISE default=RISE
) )
@ -40,12 +37,3 @@ class WebBasedTrainingBlock(blocks.StructBlock):
return {'sdfsdf': 1, return {'sdfsdf': 1,
'sldkfm': 3} 'sldkfm': 3}
# 'Transver Task'
class TranverTaskBlock(blocks.StructBlock):
title = models.CharField(max_length=128, default="")
description = models.TextField(default="")
class Meta:
icon = 'media'

View File

@ -4,8 +4,7 @@ from wagtail.core.models import Site
from vbv_lernwelt.learnpath.models import LearningPath, Topic, Circle, LearningSequence, LearningUnit from vbv_lernwelt.learnpath.models import LearningPath, Topic, Circle, LearningSequence, LearningUnit
from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory, TopicFactory, CircleFactory, \ from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory, TopicFactory, CircleFactory, \
LearningSequenceFactory, LearningUnitFactory, VideoBlockFactory, WebBasedTrainingBlockFactory, \ LearningSequenceFactory, LearningUnitFactory, VideoBlockFactory, WebBasedTrainingBlockFactory
LearningPackageFactory
def create_default_learning_path(): def create_default_learning_path():
@ -29,19 +28,6 @@ In diesem Circle erklären wir dir, wie der Lehrgang
Versicherungsvermittler / in " aufgebaut ist. Zudem vermitteln wir dir die wichtigsten Grundlagen, Versicherungsvermittler / in " aufgebaut ist. Zudem vermitteln wir dir die wichtigsten Grundlagen,
damit erfolgreich mit deinem Lernpfad starten kannst.""") damit erfolgreich mit deinem Lernpfad starten kannst.""")
ls_1 = LearningSequenceFactory(title='Einleitung', circle=circle_1)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=ls_1)
lu_1 = LearningUnitFactory(title="Herzlich Willkommmen", parent=circle_1, learning_package=lpck_1)
lu_1 = LearningUnitFactory(title="Herzlich Willkommmen 1", parent=circle_1, learning_package=lpck_1)
lu_1 = LearningUnitFactory(title="Herzlich Willkommmen 2", parent=circle_1, learning_package=lpck_1)
ls_2 = LearningSequenceFactory(title='Grundlagen', circle=circle_1)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=ls_2)
lu_1 = LearningUnitFactory(title="Aber jetzt, Butter bei die Fische", parent=circle_1, learning_package=lpck_1)
tp = TopicFactory(title="Gewinnen von Kunden", learning_path=lp) tp = TopicFactory(title="Gewinnen von Kunden", learning_path=lp)
circle_2 = CircleFactory(title="Gewinnen", parent=lp, description="""Versicherungsvermittlerinnen und -vermittler verfügen über circle_2 = CircleFactory(title="Gewinnen", parent=lp, description="""Versicherungsvermittlerinnen und -vermittler verfügen über
@ -77,10 +63,9 @@ von Neukunden zu benützen
zu visualisieren""") zu visualisieren""")
sequence_1 = LearningSequenceFactory(title="Starten", circle=circle_4) sequence_1 = LearningSequenceFactory(title="Starten", circle=circle_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_1)
learning_unit = LearningUnitFactory(title='Einleitung Circle "Anlayse"', parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory(title='Einleitung Circle "Anlayse"', parent=circle_4, learning_sequence=sequence_1)
learning_unit = LearningUnitFactory.create(title='** Einstieg Video"', parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory.create(title='** Einstieg Video"', parent=circle_4, learning_sequence=sequence_1)
video_url = "https://www.vbv.ch/fileadmin/vbv/Videos/Statements_Externe/Janos_M/Testimonial_Janos_Mischler_PositiveEffekte.mp4" video_url = "https://www.vbv.ch/fileadmin/vbv/Videos/Statements_Externe/Janos_M/Testimonial_Janos_Mischler_PositiveEffekte.mp4"
video_title = "Ausbildung ist pflicht" video_title = "Ausbildung ist pflicht"
video_description = "Erfahren Sie, was für Janos Mischler die positiven Aspekte von ständiger Weiterbildung sind aus fachlicher und aus persönlicher Sicht." video_description = "Erfahren Sie, was für Janos Mischler die positiven Aspekte von ständiger Weiterbildung sind aus fachlicher und aus persönlicher Sicht."
@ -88,56 +73,38 @@ von Neukunden zu benützen
learning_unit.contents.append(('video', video_block)) learning_unit.contents.append(('video', video_block))
learning_unit.save() learning_unit.save()
learning_unit = LearningUnitFactory.create(title='** Web Based Training"', parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory.create(title='** Web Based Training"', parent=circle_4, learning_sequence=sequence_1)
wbt_url = "web_based_trainings/rise_cmi5_test_export/scormcontent/index.html" wbt_url = "web_based_trainings/rise_cmi5_test_export/scormcontent/index.html"
wbt_block = WebBasedTrainingBlockFactory(content_type="web_based_training", url=wbt_url) wbt_block = WebBasedTrainingBlockFactory(content_type="web_based_training", url=wbt_url)
learning_unit.contents.append(('web_based_training', wbt_block)) learning_unit.contents.append(('web_based_training', wbt_block))
learning_unit.save() learning_unit.save()
learning_unit = LearningUnitFactory.create(title="Selbsteinschätzung", parent=circle_4, learning_sequence=sequence_1)
learning_unit = LearningUnitFactory.create(title="Selbsteinschätzung", parent=circle_4, learning_package=lpck_1)
sequence_2 = LearningSequenceFactory.create(title="Beobachten", circle=circle_4) sequence_2 = LearningSequenceFactory.create(title="Beobachten", circle=circle_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_2) learning_unit = LearningUnitFactory.create(title="Mein Motorfahrzeug kaufen", parent=circle_4, learning_sequence=sequence_2)
learning_unit = LearningUnitFactory.create(title="Sich selbständig machen", parent=circle_4, learning_sequence=sequence_2)
learning_unit = LearningUnitFactory.create(title="Mein Motorfahrzeug kaufen", parent=circle_4, learning_package=lpck_1)
learning_unit = LearningUnitFactory.create(title="Sich selbständig machen", parent=circle_4, learning_package=lpck_1)
sequence_3 = LearningSequenceFactory.create(title="Anwenden", circle=circle_4) sequence_3 = LearningSequenceFactory.create(title="Anwenden", circle=circle_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_3) learning_unit = LearningUnitFactory.create(title="Nora kauft sich ein neues Auto", parent=circle_4, learning_sequence=sequence_3)
learning_unit = LearningUnitFactory.create(title="Manuel träumt von einem neuen Tesla", parent=circle_4, learning_sequence=sequence_3)
learning_unit = LearningUnitFactory.create(title="Nora kauft sich ein neues Auto", parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory.create(title="Deine Erkenntnisse und Learnings", parent=circle_4, learning_sequence=sequence_3)
learning_unit = LearningUnitFactory.create(title="Manuel träumt von einem neuen Tesla", parent=circle_4, learning_package=lpck_1)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_3)
learning_unit = LearningUnitFactory.create(title="Deine Erkenntnisse und Learnings", parent=circle_4, learning_package=lpck_1)
sequence_4 = LearningSequenceFactory.create(title="Üben", circle=circle_4) sequence_4 = LearningSequenceFactory.create(title="Üben", circle=circle_4)
learning_unit = LearningUnitFactory.create(title="Ermittlung des Kundenbedarfs", parent=circle_4, learning_sequence=sequence_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_4) learning_unit = LearningUnitFactory.create(title="Aktives Zuhören", parent=circle_4, learning_sequence=sequence_4)
learning_unit = LearningUnitFactory.create(title="Ermittlung des Kundenbedarfs", parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory.create(title="In Bildern Sprechen", parent=circle_4, learning_sequence=sequence_4)
learning_unit = LearningUnitFactory.create(title="Aktives Zuhören", parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory.create(title="Priorisieren des Bedarfs", parent=circle_4, learning_sequence=sequence_4)
learning_unit = LearningUnitFactory.create(title="In Bildern Sprechen", parent=circle_4, learning_package=lpck_1) learning_unit = LearningUnitFactory.create(title="Zusammenfassung des Bedarfs", parent=circle_4, learning_sequence=sequence_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_4)
learning_unit = LearningUnitFactory.create(title="Priorisieren des Bedarfs", parent=circle_4, learning_package=lpck_1)
learning_unit = LearningUnitFactory.create(title="Zusammenfassung des Bedarfs", parent=circle_4, learning_package=lpck_1)
sequence_5 = LearningSequenceFactory.create(title="Testen", circle=circle_4) sequence_5 = LearningSequenceFactory.create(title="Testen", circle=circle_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_5) learning_unit = LearningUnitFactory.create(title="Bedarfsfragen", parent=circle_4, learning_sequence=sequence_5)
learning_unit = LearningUnitFactory.create(title="Andwendung der Fragetechniken", parent=circle_4, learning_sequence=sequence_5)
learning_unit = LearningUnitFactory.create(title="Bedarfsfragen", parent=circle_4, learning_package=lpck_1)
learning_unit = LearningUnitFactory.create(title="Andwendung der Fragetechniken", parent=circle_4, learning_package=lpck_1)
sequence_5 = LearningSequenceFactory.create(title="Vernetzen", circle=circle_4) sequence_5 = LearningSequenceFactory.create(title="Vernetzen", circle=circle_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_5) learning_unit = LearningUnitFactory.create(title="Online Training", parent=circle_4, learning_sequence=sequence_5)
learning_unit = LearningUnitFactory.create(title="Online Training", parent=circle_4, learning_package=lpck_1)
sequence_6 = LearningSequenceFactory.create(title="Beenden", circle=circle_4) sequence_6 = LearningSequenceFactory.create(title="Beenden", circle=circle_4)
lpck_1 = LearningPackageFactory(title="Wunderbar !", learning_sequence=sequence_6) learning_unit = LearningUnitFactory.create(title="Selbsteinschätzung", parent=circle_4, learning_sequence=sequence_6)
learning_unit = LearningUnitFactory.create(title="Selbsteinschätzung", parent=circle_4, learning_package=lpck_1)
circle_5 = CircleFactory.create(title="Lösung", circle_5 = CircleFactory.create(title="Lösung",
parent=lp, parent=lp,

View File

@ -1,7 +1,7 @@
import factory import factory
import wagtail_factories import wagtail_factories
from vbv_lernwelt.learnpath.models import LearningPath, Topic, Circle, LearningSequence, LearningUnit, LearningPackage from vbv_lernwelt.learnpath.models import LearningPath, Topic, Circle, LearningSequence, LearningUnit
from vbv_lernwelt.learnpath.models_learning_unit_content import VideoBlock, WebBasedTrainingBlock from vbv_lernwelt.learnpath.models_learning_unit_content import VideoBlock, WebBasedTrainingBlock
@ -33,12 +33,6 @@ class LearningSequenceFactory(factory.django.DjangoModelFactory):
class Meta: class Meta:
model = LearningSequence model = LearningSequence
class LearningPackageFactory(factory.django.DjangoModelFactory):
title = "Whatever"
class Meta:
model = LearningPackage
class LearningUnitFactory(wagtail_factories.PageFactory): class LearningUnitFactory(wagtail_factories.PageFactory):
title = "Herzlich Willkommen" title = "Herzlich Willkommen"
@ -54,6 +48,7 @@ class VideoBlockFactory(wagtail_factories.StructBlockFactory):
class Meta: class Meta:
model = VideoBlock model = VideoBlock
class WebBasedTrainingBlockFactory(wagtail_factories.StructBlockFactory): class WebBasedTrainingBlockFactory(wagtail_factories.StructBlockFactory):
title = "Beispiel Rise Modul" title = "Beispiel Rise Modul"
url = "https://docs.wagtail.org/en/stable/topics/streamfield.html" url = "https://docs.wagtail.org/en/stable/topics/streamfield.html"