From 52d0fc4fce3f8784fa771391d3ed490b117e3e5d Mon Sep 17 00:00:00 2001 From: "N. Geisler" <ngeisler@fachschaft.informatik.tu-darmstadt.de> Date: Fri, 25 Oct 2019 16:15:31 +0200 Subject: [PATCH] add event dependencies associate AKTrack with an Event associate AKCategory with an Event restrict AK requirements to those associated with the same event restrict AK categories to those associated with the same event --- AKModel/migrations/0024_event_dependencies.py | 61 +++++++++++++++++++ AKModel/models.py | 6 ++ AKSubmission/forms.py | 5 +- 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 AKModel/migrations/0024_event_dependencies.py diff --git a/AKModel/migrations/0024_event_dependencies.py b/AKModel/migrations/0024_event_dependencies.py new file mode 100644 index 00000000..1fed7e23 --- /dev/null +++ b/AKModel/migrations/0024_event_dependencies.py @@ -0,0 +1,61 @@ +# Generated by Django 2.2.6 on 2019-10-25 13:44 + +import django.db.models.deletion +from django.db import migrations, models + +from AKModel.models import AKCategory, Event, AKTrack + + +def migrate_data_forward(apps, schema_editor): + for instance in AKCategory.objects.all(): + if not instance.event: + instance.event = Event.objects.filter(active=True).last() + instance.save() + + for instance in AKTrack.objects.all(): + if not instance.event: + instance.event = Event.objects.filter(active=True).last() + instance.save() + + +class Migration(migrations.Migration): + dependencies = [ + ('AKModel', '0023_event_default_slot'), + ] + + operations = [ + migrations.AddField( + model_name='akcategory', + name='event', + field=models.ForeignKey(help_text='Associated event', null=True, + on_delete=django.db.models.deletion.CASCADE, to='AKModel.Event', + verbose_name='Event'), + ), + migrations.AddField( + model_name='aktrack', + name='event', + field=models.ForeignKey(help_text='Associated event', null=True, + on_delete=django.db.models.deletion.CASCADE, to='AKModel.Event', + verbose_name='Event'), + ), + + migrations.RunPython( + migrate_data_forward, + reverse_code=migrations.RunPython.noop, + ), + + migrations.AlterField( + model_name='akcategory', + name='event', + field=models.ForeignKey(help_text='Associated event', + on_delete=django.db.models.deletion.CASCADE, to='AKModel.Event', + verbose_name='Event'), + ), + migrations.AlterField( + model_name='aktrack', + name='event', + field=models.ForeignKey(help_text='Associated event', + on_delete=django.db.models.deletion.CASCADE, to='AKModel.Event', + verbose_name='Event'), + ), + ] diff --git a/AKModel/models.py b/AKModel/models.py index 28533479..a78c3500 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -97,6 +97,9 @@ class AKCategory(models.Model): description = models.TextField(blank=True, verbose_name=_("Description"), help_text=_("Short description of this AK Category")) + event = models.ForeignKey(to=Event, null=True, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) + class Meta: verbose_name = _('AK Category') verbose_name_plural = _('AK Categories') @@ -112,6 +115,9 @@ class AKTrack(models.Model): name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'), help_text=_('Name of the AK Track')) color = models.CharField(max_length=7, blank=True, verbose_name=_('Color'), help_text=_('Color for displaying')) + event = models.ForeignKey(to=Event, null=True, on_delete=models.CASCADE, verbose_name=_('Event'), + help_text=_('Associated event')) + class Meta: verbose_name = _('AK Track') verbose_name_plural = _('AK Tracks') diff --git a/AKSubmission/forms.py b/AKSubmission/forms.py index bddf2857..fdb8f194 100644 --- a/AKSubmission/forms.py +++ b/AKSubmission/forms.py @@ -4,7 +4,7 @@ from django import forms from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ -from AKModel.models import AK, AKOwner +from AKModel.models import AK, AKOwner, AKCategory, AKRequirement class AKForm(forms.ModelForm): @@ -48,6 +48,9 @@ class AKForm(forms.ModelForm): label=AK.tags.field.verbose_name, help_text=f"{AK.tags.field.help_text} ({help_tags_addition})") + self.fields['category'].queryset = AKCategory.objects.filter(event=self.initial.get('event')) + self.fields['requirements'].queryset = AKRequirement.objects.filter(event=self.initial.get('event')) + @staticmethod def _clean_duration(duration): # Handle different duration formats (h:mm and decimal comma instead of point) -- GitLab