From edfc5eb81a6fd1e6ecf205045f56d03e3c48ddc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 10 Jul 2017 19:18:44 +0200 Subject: [PATCH] category.single in EditorForm --- src/c3nav/editor/forms.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/c3nav/editor/forms.py b/src/c3nav/editor/forms.py index aa54fc0b..77bd6531 100644 --- a/src/c3nav/editor/forms.py +++ b/src/c3nav/editor/forms.py @@ -5,7 +5,7 @@ from functools import reduce from django.conf import settings from django.core.exceptions import FieldDoesNotExist -from django.forms import BooleanField, CharField, ModelForm, MultipleChoiceField, ValidationError +from django.forms import BooleanField, CharField, ChoiceField, ModelForm, MultipleChoiceField, ValidationError from django.forms.widgets import HiddenInput from django.utils.translation import ugettext_lazy as _ from shapely.geometry.geo import mapping @@ -38,17 +38,26 @@ class EditorFormBase(ModelForm): kwargs = {'allow_'+self._meta.model._meta.default_related_name: True} categories = LocationGroupCategory.objects.filter(**kwargs).prefetch_related('groups') - instance_groups = set(self.instance.groups.values_list('pk', flat=True)) if self.instance.pk else set() + if self.instance.pk: + instance_groups = tuple(self.instance.groups.values_list('pk', flat=True)) + else: + instance_groups = () self.fields.pop('groups') for category in categories: choices = tuple((str(group.pk), group.title) for group in category.groups.all()) - initial = instance_groups & set(group.pk for group in category.groups.all()) - initial = tuple(str(s) for s in initial) - field = MultipleChoiceField(label=category.title, required=False, initial=initial, choices=choices) - self.fields['groups_'+category.name] = field - self.fields.move_to_end('groups_'+category.name, last=False) + category_groups = set(group.pk for group in category.groups.all()) + initial = tuple(str(pk) for pk in instance_groups if pk in category_groups) + if category.single: + name = 'group_'+category.name + initial = initial[0] if initial else '' + field = ChoiceField(label=category.title, required=False, initial=initial, choices=choices) + else: + name = 'groups_'+category.name + field = MultipleChoiceField(label=category.title, required=False, initial=initial, choices=choices) + self.fields[name] = field + self.fields.move_to_end(name, last=False) if 'category' in self.fields: self.fields['category'].label_from_instance = lambda obj: obj.title