From 5555992f06272b88bccc5db8570d862351e34947 Mon Sep 17 00:00:00 2001 From: Kevin Alberts Date: Thu, 13 Sep 2018 13:43:47 +0200 Subject: [PATCH] Add possibility to add custom states to an association. --- dronken/admin.py | 1 + dronken/migrations/0005_auto_20180913_1129.py | 26 +++++++++++++++++++ dronken/migrations/0006_auto_20180913_1135.py | 18 +++++++++++++ dronken/migrations/0007_auto_20180913_1141.py | 18 +++++++++++++ dronken/models.py | 20 +++++++++++++- dronken/views.py | 13 +++++++++- 6 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 dronken/migrations/0005_auto_20180913_1129.py create mode 100644 dronken/migrations/0006_auto_20180913_1135.py create mode 100644 dronken/migrations/0007_auto_20180913_1141.py diff --git a/dronken/admin.py b/dronken/admin.py index bd4e379..b4d4fe4 100644 --- a/dronken/admin.py +++ b/dronken/admin.py @@ -3,3 +3,4 @@ from dronken.models import * admin.site.register(City) admin.site.register(Association) +admin.site.register(ExtraState) diff --git a/dronken/migrations/0005_auto_20180913_1129.py b/dronken/migrations/0005_auto_20180913_1129.py new file mode 100644 index 0000000..d108277 --- /dev/null +++ b/dronken/migrations/0005_auto_20180913_1129.py @@ -0,0 +1,26 @@ +# Generated by Django 2.0 on 2018-09-13 11:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dronken', '0004_auto_20180306_1341'), + ] + + operations = [ + migrations.CreateModel( + name='ExtraState', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('value', models.CharField(max_length=255)), + ], + ), + migrations.AddField( + model_name='association', + name='extra_states', + field=models.ManyToManyField(to='dronken.ExtraState'), + ), + ] diff --git a/dronken/migrations/0006_auto_20180913_1135.py b/dronken/migrations/0006_auto_20180913_1135.py new file mode 100644 index 0000000..6f8a889 --- /dev/null +++ b/dronken/migrations/0006_auto_20180913_1135.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0 on 2018-09-13 11:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dronken', '0005_auto_20180913_1129'), + ] + + operations = [ + migrations.AlterField( + model_name='association', + name='state', + field=models.CharField(max_length=255), + ), + ] diff --git a/dronken/migrations/0007_auto_20180913_1141.py b/dronken/migrations/0007_auto_20180913_1141.py new file mode 100644 index 0000000..eb16f87 --- /dev/null +++ b/dronken/migrations/0007_auto_20180913_1141.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0 on 2018-09-13 11:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dronken', '0006_auto_20180913_1135'), + ] + + operations = [ + migrations.AlterField( + model_name='association', + name='extra_states', + field=models.ManyToManyField(blank=True, null=True, to='dronken.ExtraState'), + ), + ] diff --git a/dronken/models.py b/dronken/models.py index a4a3d15..76a7384 100644 --- a/dronken/models.py +++ b/dronken/models.py @@ -21,10 +21,28 @@ class Association(models.Model): short_name = models.CharField(max_length=255) slug = models.CharField(max_length=255) intern = models.CharField(max_length=255, blank=True, null=True) - state = models.CharField(choices=STATES, max_length=255) + state = models.CharField(max_length=255) city = models.ForeignKey(to=City, on_delete=models.SET_NULL, blank=True, null=True) has_intern = models.BooleanField() enabled = models.BooleanField() + extra_states = models.ManyToManyField(to='ExtraState', blank=True, null=True) + + def __str__(self): + return self.name + + def get_state_display(self): + values = dict(list(Association.STATES)) + values.update(dict([(x.value, x.name) for x in self.extra_states.all()])) + + try: + return values[self.state] + except KeyError: + return "Onbekend" + + +class ExtraState(models.Model): + name = models.CharField(max_length=255) + value = models.CharField(max_length=255) def __str__(self): return self.name diff --git a/dronken/views.py b/dronken/views.py index 57a0c3c..7a93c1f 100644 --- a/dronken/views.py +++ b/dronken/views.py @@ -2,7 +2,7 @@ from django import forms from django.urls import reverse_lazy from django.views.generic import ListView, UpdateView -from dronken.models import City, Association +from dronken.models import City, Association, ExtraState class CityList(ListView): @@ -36,6 +36,17 @@ class DrunkUpdateForm(forms.ModelForm): model = Association fields = ['state'] + def __init__(self, *args, **kwargs): + super(DrunkUpdateForm, self).__init__(*args, **kwargs) + + self.fields['state'] = forms.ChoiceField( + choices=list(Association.STATES) + [(o.value, o.name) for o in self.instance.extra_states.all()] + ) + + def clean(self): + print(self.instance.state) + return super(DrunkUpdateForm, self).clean() + class AssociationDetail(UpdateView): template_name = 'association.html'