From 9dd9a025926f0f336fb6cd5279ce3afec3ea0aac Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Tue, 25 Apr 2023 17:23:58 +0200 Subject: [PATCH] Add new package to help with editing JSON fields --- server/config/settings/base.py | 1 + server/requirements/requirements.in | 1 + server/requirements/requirements.txt | 3 +++ server/vbv_lernwelt/course/admin.py | 3 --- ...005_alter_coursesession_attendance_days.py | 19 ++++++++++++++++++ server/vbv_lernwelt/course/models.py | 20 ++++++++++++++++++- 6 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 server/vbv_lernwelt/course/migrations/0005_alter_coursesession_attendance_days.py diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 5d32205a..006538d7 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -101,6 +101,7 @@ THIRD_PARTY_APPS = [ "grapple", "graphene_django", "notifications", + "django_jsonform", ] LOCAL_APPS = [ diff --git a/server/requirements/requirements.in b/server/requirements/requirements.in index 6840b391..cd4615ef 100644 --- a/server/requirements/requirements.in +++ b/server/requirements/requirements.in @@ -26,6 +26,7 @@ django-ipware django-csp django-storages django-notifications-hq +django-jsonform psycopg2-binary gunicorn diff --git a/server/requirements/requirements.txt b/server/requirements/requirements.txt index 2fb6cfe5..7694bd84 100644 --- a/server/requirements/requirements.txt +++ b/server/requirements/requirements.txt @@ -62,6 +62,7 @@ django==3.2.13 # django-cors-headers # django-csp # django-filter + # django-jsonform # django-model-utils # django-modelcluster # django-notifications-hq @@ -87,6 +88,8 @@ django-filter==21.1 # via wagtail django-ipware==4.0.2 # via -r requirements.in +django-jsonform==2.17.0 + # via -r requirements.in django-model-utils==4.2.0 # via # -r requirements.in diff --git a/server/vbv_lernwelt/course/admin.py b/server/vbv_lernwelt/course/admin.py index 6405fa12..20fe089a 100644 --- a/server/vbv_lernwelt/course/admin.py +++ b/server/vbv_lernwelt/course/admin.py @@ -8,9 +8,6 @@ from vbv_lernwelt.learnpath.models import Circle @admin.register(CourseSession) class CourseSessionAdmin(admin.ModelAdmin): - formfield_overrides = { - JSONField: {"widget": PrettyJSONWidget(attrs={"rows": 16, "cols": 80})}, - } date_hierarchy = "created_at" list_display = [ "title", diff --git a/server/vbv_lernwelt/course/migrations/0005_alter_coursesession_attendance_days.py b/server/vbv_lernwelt/course/migrations/0005_alter_coursesession_attendance_days.py new file mode 100644 index 00000000..912f13e9 --- /dev/null +++ b/server/vbv_lernwelt/course/migrations/0005_alter_coursesession_attendance_days.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.13 on 2023-04-25 12:28 + +from django.db import migrations +import django_jsonform.models.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('course', '0004_coursesession_assignment_details_list'), + ] + + operations = [ + migrations.AlterField( + model_name='coursesession', + name='attendance_days', + field=django_jsonform.models.fields.JSONField(), + ), + ] diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py index fa70a344..000ff413 100644 --- a/server/vbv_lernwelt/course/models.py +++ b/server/vbv_lernwelt/course/models.py @@ -3,6 +3,7 @@ from django.db.models import UniqueConstraint from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ from wagtail.models import Page +from django_jsonform.models.fields import JSONField from vbv_lernwelt.core.model_utils import find_available_slug from vbv_lernwelt.core.models import User @@ -178,6 +179,23 @@ class CourseSession(models.Model): Das anhängen kann via CourseSessionUser oder "Schulklasse (TODO)" geschehen """ + ATTENDANCE_DAYS_SCHEMA = { + "type": "array", + "items": { + "type": "object", + "properties": { + "learningContentId": { + "type": "number", + "title": "ID des Lerninhalts", + "required": True, + }, + "date": {"type": "string"}, + "location": {"type": "string"}, + "trainer": {"type": "string"}, + }, + }, + } + created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) @@ -187,7 +205,7 @@ class CourseSession(models.Model): start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) - attendance_days = models.JSONField(default=list, blank=True) + attendance_days = JSONField(schema=ATTENDANCE_DAYS_SCHEMA, blank=True, default=list) assignment_details_list = models.JSONField(default=list, blank=True) additional_json_data = models.JSONField(default=dict, blank=True)