From f1b6dd9992d0b94307bb097faa1a824e447bec7b Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 12 Jul 2020 14:53:57 +0200 Subject: [PATCH] Add extra mark model --- .../alsijil/migrations/0002_extra_mark.py | 72 +++++++++++++++++++ aleksis/apps/alsijil/models.py | 28 ++++++++ 2 files changed, 100 insertions(+) create mode 100644 aleksis/apps/alsijil/migrations/0002_extra_mark.py diff --git a/aleksis/apps/alsijil/migrations/0002_extra_mark.py b/aleksis/apps/alsijil/migrations/0002_extra_mark.py new file mode 100644 index 000000000..15715ae1d --- /dev/null +++ b/aleksis/apps/alsijil/migrations/0002_extra_mark.py @@ -0,0 +1,72 @@ +# Generated by Django 3.0.8 on 2020-07-12 12:43 + +import django.contrib.postgres.fields.jsonb +import django.contrib.sites.managers +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("sites", "0002_alter_domain_unique"), + ("alsijil", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="ExtraMark", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "extended_data", + django.contrib.postgres.fields.jsonb.JSONField( + default=dict, editable=False + ), + ), + ( + "short_name", + models.CharField( + max_length=255, unique=True, verbose_name="Short name" + ), + ), + ( + "name", + models.CharField(max_length=255, unique=True, verbose_name="Name"), + ), + ( + "site", + models.ForeignKey( + default=1, + editable=False, + on_delete=django.db.models.deletion.CASCADE, + to="sites.Site", + ), + ), + ], + options={ + "verbose_name": "Extra mark", + "verbose_name_plural": "Extra marks", + "ordering": ["short_name"], + }, + managers=[("objects", django.contrib.sites.managers.CurrentSiteManager()),], + ), + migrations.AddField( + model_name="personalnote", + name="extra_marks", + field=models.ManyToManyField( + blank=True, + null=True, + to="alsijil.ExtraMark", + verbose_name="Extra marks", + ), + ), + ] diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index eb1bc4eb6..9473f54a0 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -30,6 +30,10 @@ class PersonalNote(ExtensibleModel): remarks = models.CharField(max_length=200, blank=True) + extra_marks = models.ManyToManyField( + "ExtraMark", null=True, blank=True, verbose_name=_("Extra marks") + ) + class Meta: verbose_name = _("Personal note") verbose_name_plural = _("Personal notes") @@ -91,3 +95,27 @@ class PersonalNoteFilter(ExtensibleModel): verbose_name = _("Personal note filter") verbose_name_plural = _("Personal note filters") ordering = ["identifier"] + + +class ExtraMark(ExtensibleModel): + """A model for extra marks. + + Can be used for lesson-based counting of things (like forgotten homework). + """ + + short_name = models.CharField( + max_length=255, unique=True, verbose_name=_("Short name") + ) + name = models.CharField(max_length=255, unique=True, verbose_name=_("Name")) + + def __str__(self): + return f"{self.name} ({self.short_name})" + + @property + def count_label(self): + return f"{self.short_name}_count" + + class Meta: + ordering = ["short_name"] + verbose_name = _("Extra mark") + verbose_name_plural = _("Extra marks") -- GitLab