category.single in EditorForm
This commit is contained in:
parent
f48298ae1d
commit
edfc5eb81a
1 changed files with 16 additions and 7 deletions
|
@ -5,7 +5,7 @@ from functools import reduce
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import FieldDoesNotExist
|
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.forms.widgets import HiddenInput
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from shapely.geometry.geo import mapping
|
from shapely.geometry.geo import mapping
|
||||||
|
@ -38,17 +38,26 @@ class EditorFormBase(ModelForm):
|
||||||
|
|
||||||
kwargs = {'allow_'+self._meta.model._meta.default_related_name: True}
|
kwargs = {'allow_'+self._meta.model._meta.default_related_name: True}
|
||||||
categories = LocationGroupCategory.objects.filter(**kwargs).prefetch_related('groups')
|
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')
|
self.fields.pop('groups')
|
||||||
|
|
||||||
for category in categories:
|
for category in categories:
|
||||||
choices = tuple((str(group.pk), group.title) for group in category.groups.all())
|
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())
|
category_groups = set(group.pk for group in category.groups.all())
|
||||||
initial = tuple(str(s) for s in initial)
|
initial = tuple(str(pk) for pk in instance_groups if pk in category_groups)
|
||||||
field = MultipleChoiceField(label=category.title, required=False, initial=initial, choices=choices)
|
if category.single:
|
||||||
self.fields['groups_'+category.name] = field
|
name = 'group_'+category.name
|
||||||
self.fields.move_to_end('groups_'+category.name, last=False)
|
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:
|
if 'category' in self.fields:
|
||||||
self.fields['category'].label_from_instance = lambda obj: obj.title
|
self.fields['category'].label_from_instance = lambda obj: obj.title
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue