Update instrument schema

This commit is contained in:
Ramon Wenger 2022-09-13 16:22:35 +02:00
parent 3810932cac
commit ac972c7196
5 changed files with 45 additions and 2 deletions

View File

@ -9,7 +9,7 @@ INTERDISCIPLINARY = 'interdisciplinary'
CATEGORY_CHOICES = ( CATEGORY_CHOICES = (
(LANGUAGE_COMMUNICATION, '#DAA009', '#FFF5D9', 'Sprache & Kommunikation'), (LANGUAGE_COMMUNICATION, '#DAA009', '#FFF5D9', 'Sprache & Kommunikation'),
(SOCIETY, '#0F7CAC', '#DBEEF6', 'Gesellschaft'), (SOCIETY, '#0F7CAC', '#DBEEF6', 'Gesellschaft'),
(INTERDISCIPLINARY, '#99B53E', '#F3F9E3', 'Überfachliches Instrument'), (INTERDISCIPLINARY, '#99B53E', '#F3F9E3', 'Überfachliche Instrumente'),
) )
def create_categories(apps, schema_editor): def create_categories(apps, schema_editor):

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.13 on 2022-09-13 10:55
import basicknowledge.models
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('basicknowledge', '0023_alter_instrumenttype_category'),
]
operations = [
migrations.AlterField(
model_name='basicknowledge',
name='old_type',
field=models.CharField(blank=True, choices=[('language_communication', 'Sprache & Kommunikation'), ('society', 'Gesellschaft'), ('interdisciplinary', 'Überfachliche Instrumente')], max_length=100),
),
migrations.AlterField(
model_name='instrumenttype',
name='category',
field=models.ForeignKey(default=basicknowledge.models.default_category, on_delete=django.db.models.deletion.PROTECT, related_name='instrument_types', to='basicknowledge.instrumentcategory'),
),
]

View File

@ -33,6 +33,7 @@ class InstrumentCategory(models.Model):
def default_category(): def default_category():
return InstrumentCategory.objects.first().pk return InstrumentCategory.objects.first().pk
class InstrumentType(models.Model): class InstrumentType(models.Model):
CATEGORY_CHOICES = ( CATEGORY_CHOICES = (
(LANGUAGE_COMMUNICATION, LANGUAGE_COMMUNICATION_LABEL), (LANGUAGE_COMMUNICATION, LANGUAGE_COMMUNICATION_LABEL),
@ -45,7 +46,8 @@ class InstrumentType(models.Model):
InstrumentCategory, InstrumentCategory,
on_delete=models.PROTECT, on_delete=models.PROTECT,
null=False, null=False,
default=default_category default=default_category,
related_name='instrument_types'
) )
@property @property

View File

@ -8,19 +8,29 @@ from notes.models import InstrumentBookmark
from notes.schema import InstrumentBookmarkNode from notes.schema import InstrumentBookmarkNode
from .models import BasicKnowledge, InstrumentCategory, InstrumentType from .models import BasicKnowledge, InstrumentCategory, InstrumentType
class InstrumentCategoryNode(DjangoObjectType): class InstrumentCategoryNode(DjangoObjectType):
types = graphene.List('basicknowledge.queries.InstrumentTypeNode')
class Meta: class Meta:
model = InstrumentCategory model = InstrumentCategory
interfaces = (relay.Node,)
only_fields = [ only_fields = [
'name', 'foreground', 'background', 'id' 'name', 'foreground', 'background', 'id'
] ]
@staticmethod
def resolve_types(root: InstrumentCategory, info, **kwargs):
return root.instrument_types.filter(instruments__isnull=False).order_by('name').distinct()
class InstrumentTypeNode(DjangoObjectType): class InstrumentTypeNode(DjangoObjectType):
type = graphene.String(required=True) type = graphene.String(required=True)
category = graphene.Field(InstrumentCategoryNode) category = graphene.Field(InstrumentCategoryNode)
class Meta: class Meta:
model = InstrumentType model = InstrumentType
interfaces = (relay.Node,)
only_fields = [ only_fields = [
'name', 'category', 'type', 'id' 'name', 'category', 'type', 'id'
] ]
@ -58,6 +68,7 @@ class InstrumentQuery(object):
instrument = graphene.Field(InstrumentNode, slug=graphene.String(), id=graphene.ID()) instrument = graphene.Field(InstrumentNode, slug=graphene.String(), id=graphene.ID())
instruments = graphene.List(InstrumentNode) instruments = graphene.List(InstrumentNode)
instrument_types = graphene.List(InstrumentTypeNode) instrument_types = graphene.List(InstrumentTypeNode)
instrument_categories = graphene.List(InstrumentCategoryNode)
def resolve_instrument(self, info, **kwargs): def resolve_instrument(self, info, **kwargs):
slug = kwargs.get('slug') slug = kwargs.get('slug')
@ -74,3 +85,6 @@ class InstrumentQuery(object):
def resolve_instrument_types(self, info, **kwargs): def resolve_instrument_types(self, info, **kwargs):
return InstrumentType.objects.filter(instruments__isnull=False).order_by('name').distinct() return InstrumentType.objects.filter(instruments__isnull=False).order_by('name').distinct()
def resolve_instrument_categories(self, info, **kwargs):
return InstrumentCategory.objects.all()

View File

@ -516,6 +516,7 @@ type InstrumentCategoryNode {
name: String! name: String!
background: String! background: String!
foreground: String! foreground: String!
types: [InstrumentTypeNode]
} }
type InstrumentNode implements Node { type InstrumentNode implements Node {
@ -875,6 +876,7 @@ type Query {
instrument(slug: String, id: ID): InstrumentNode instrument(slug: String, id: ID): InstrumentNode
instruments: [InstrumentNode] instruments: [InstrumentNode]
instrumentTypes: [InstrumentTypeNode] instrumentTypes: [InstrumentTypeNode]
instrumentCategories: [InstrumentCategoryNode]
studentSubmission(id: ID!): StudentSubmissionNode studentSubmission(id: ID!): StudentSubmissionNode
assignment(id: ID!): AssignmentNode assignment(id: ID!): AssignmentNode
assignments: [AssignmentNode] assignments: [AssignmentNode]