diff --git a/server/basicknowledge/migrations/0011_auto_20211031_1144.py b/server/basicknowledge/migrations/0011_auto_20211031_1144.py new file mode 100644 index 00000000..d187aacb --- /dev/null +++ b/server/basicknowledge/migrations/0011_auto_20211031_1144.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2021-10-31 11:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('basicknowledge', '0010_auto_20211030_2004'), + ] + + operations = [ + migrations.AlterField( + model_name='instrumenttype', + name='name', + field=models.CharField(max_length=255, unique=True), + ), + ] diff --git a/server/basicknowledge/models.py b/server/basicknowledge/models.py index b1d3755f..3c987493 100644 --- a/server/basicknowledge/models.py +++ b/server/basicknowledge/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils.text import slugify from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel from wagtail.core.fields import RichTextField, StreamField from wagtail.images.blocks import ImageChooserBlock @@ -20,14 +21,18 @@ class InstrumentType(models.Model): (INTERDISCIPLINARY, 'Überfachliches Instrument'), ) - name = models.CharField(max_length=255) + name = models.CharField(max_length=255, unique=True) category = models.CharField( max_length=100, choices=CATEGORY_CHOICES ) + @property + def type(self): + return slugify(self.name.lower()) + def __str__(self): - return self.name + return self.type class BasicKnowledge(StrictHierarchyPage): diff --git a/server/basicknowledge/queries.py b/server/basicknowledge/queries.py index e1339205..0b27f10b 100644 --- a/server/basicknowledge/queries.py +++ b/server/basicknowledge/queries.py @@ -1,7 +1,6 @@ import graphene from graphene import relay from graphene_django import DjangoObjectType -from graphene_django.filter import DjangoFilterConnectionField from api.utils import get_object from notes.models import InstrumentBookmark @@ -10,17 +9,22 @@ from .models import BasicKnowledge, InstrumentType class InstrumentTypeNode(DjangoObjectType): + type = graphene.String(required=True) + class Meta: model = InstrumentType only_fields = [ - 'name', 'category' + 'name', 'category', 'type', 'id' ] + @staticmethod + def resolve_type(root: InstrumentType, info, **kwargs): + return root.type + class InstrumentNode(DjangoObjectType): bookmarks = graphene.List(InstrumentBookmarkNode) - type = graphene.String() - category = graphene.String() + type = graphene.Field(InstrumentTypeNode) class Meta: model = BasicKnowledge @@ -32,11 +36,7 @@ class InstrumentNode(DjangoObjectType): @staticmethod def resolve_type(root: BasicKnowledge, info, **kwargs): - return root.new_type.name - - @staticmethod - def resolve_category(root: BasicKnowledge, info, **kwargs): - return root.new_type.category + return root.new_type def resolve_bookmarks(self, info, **kwargs): return InstrumentBookmark.objects.filter( @@ -44,6 +44,7 @@ class InstrumentNode(DjangoObjectType): instrument=self ) + class InstrumentQuery(object): instrument = graphene.Field(InstrumentNode, slug=graphene.String(), id=graphene.ID()) instruments = graphene.List(InstrumentNode) diff --git a/server/schema.graphql b/server/schema.graphql index 105ff4ce..692ebc21 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -606,8 +606,7 @@ type InstrumentNode implements Node { contents: GenericStreamFieldType id: ID! bookmarks: [InstrumentBookmarkNode] - type: String - category: String + type: InstrumentTypeNode } type InstrumentNodeConnection { @@ -627,8 +626,10 @@ enum InstrumentTypeCategory { } type InstrumentTypeNode { + id: ID! name: String! category: InstrumentTypeCategory! + type: String! } scalar JSONString