From d172e9a005e7eea59d4aa283d159d1c037cc04ea Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Tue, 13 Sep 2022 10:49:26 +0200 Subject: [PATCH] Add instrument category model --- .../migrations/0019_auto_20220913_0820.py | 31 +++++++++++++++++++ server/basicknowledge/models.py | 19 +++++++++++- server/basicknowledge/wagtail_hooks.py | 7 +++++ server/books/factories.py | 12 ++++++- server/schema.graphql | 7 +++++ 5 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 server/basicknowledge/migrations/0019_auto_20220913_0820.py diff --git a/server/basicknowledge/migrations/0019_auto_20220913_0820.py b/server/basicknowledge/migrations/0019_auto_20220913_0820.py new file mode 100644 index 00000000..ddbe1094 --- /dev/null +++ b/server/basicknowledge/migrations/0019_auto_20220913_0820.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2.13 on 2022-09-13 08:20 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('basicknowledge', '0018_alter_basicknowledge_contents'), + ] + + operations = [ + migrations.CreateModel( + name='InstrumentCategory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('background', models.CharField(max_length=7, verbose_name='background color')), + ('foreground', models.CharField(max_length=7, verbose_name='foreground color')), + ], + options={ + 'verbose_name_plural': 'instrument categories', + }, + ), + migrations.AddField( + model_name='instrumenttype', + name='new_category', + field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='basicknowledge.instrumentcategory'), + ), + ] diff --git a/server/basicknowledge/models.py b/server/basicknowledge/models.py index b0386d29..43ba6604 100644 --- a/server/basicknowledge/models.py +++ b/server/basicknowledge/models.py @@ -15,6 +15,18 @@ SOCIETY = 'society' INTERDISCIPLINARY = 'interdisciplinary' +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' + + class InstrumentType(models.Model): CATEGORY_CHOICES = ( (LANGUAGE_COMMUNICATION, 'Sprache & Kommunikation'), @@ -27,6 +39,12 @@ class InstrumentType(models.Model): max_length=100, choices=CATEGORY_CHOICES ) + new_category = models.ForeignKey( + InstrumentCategory, + on_delete=models.PROTECT, + null=True, + default=None + ) @property def type(self): @@ -36,7 +54,6 @@ class InstrumentType(models.Model): return self.type - class BasicKnowledge(StrictHierarchyPage): parent_page_types = ['books.book'] diff --git a/server/basicknowledge/wagtail_hooks.py b/server/basicknowledge/wagtail_hooks.py index d847d985..6c963a3b 100644 --- a/server/basicknowledge/wagtail_hooks.py +++ b/server/basicknowledge/wagtail_hooks.py @@ -8,5 +8,12 @@ class InstrumentAdmin(ModelAdmin): list_display = ('title', 'new_type', 'status_string') search_fields = ('title', 'new_type__name') +class InstrumentCategoryAdmin(ModelAdmin): + model = InstrumentCategory + +class InstrumentTypeAdmin(ModelAdmin): + model = InstrumentType modeladmin_register(InstrumentAdmin) +modeladmin_register(InstrumentCategoryAdmin) +modeladmin_register(InstrumentTypeAdmin) diff --git a/server/books/factories.py b/server/books/factories.py index 4e90311c..b18211ea 100644 --- a/server/books/factories.py +++ b/server/books/factories.py @@ -9,7 +9,8 @@ from wagtail.core.models import Page, Site from wagtail.core.rich_text import RichText from assignments.models import Assignment -from basicknowledge.models import BasicKnowledge, INTERDISCIPLINARY, InstrumentType, LANGUAGE_COMMUNICATION, SOCIETY +from basicknowledge.models import BasicKnowledge, INTERDISCIPLINARY, InstrumentCategory, InstrumentType, \ + LANGUAGE_COMMUNICATION, SOCIETY from books.blocks import AssignmentBlock, BasicKnowledgeBlock, ImageUrlBlock, LinkBlock, VideoBlock from books.models import Book, Chapter, ContentBlock, Module, TextBlock, Topic from core.factories import BasePageFactory, DummyImageFactory, fake, fake_paragraph, fake_title @@ -70,6 +71,15 @@ class TextBlockFactory(wagtail_factories.StructBlockFactory): model = TextBlock +class InstrumentCategoryFactory(factory.DjangoModelFactory): + class Meta: + model = InstrumentCategory + django_get_or_create = ('name',) + + name = factory.Iterator([LANGUAGE_COMMUNICATION, SOCIETY, INTERDISCIPLINARY]) + foreground = factory.Iterator(['FF0000', 'FFFFFF', '000000']) + background = factory.Iterator(['FF0000', 'FFFFFF', '000000']) + class InstrumentTypeFactory(factory.DjangoModelFactory): class Meta: model = InstrumentType diff --git a/server/schema.graphql b/server/schema.graphql index 98cd30bf..ab80e33d 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -511,6 +511,13 @@ type InstrumentBookmarkNode implements Node { instrument: InstrumentNode! } +type InstrumentCategoryNode { + id: ID! + name: String! + background: String! + foreground: String! +} + type InstrumentNode implements Node { title: String! slug: String!