restrict choices in package choice and hide if only one choice allowed

This commit is contained in:
Laura Klünder 2016-09-26 17:23:08 +02:00
parent 66c459ae17
commit 78fc67ebdb
2 changed files with 22 additions and 15 deletions

View file

@ -2,23 +2,38 @@ from collections import OrderedDict
from django.conf import settings
from django.forms import CharField, ModelForm, ValidationError
from django.forms.models import ModelChoiceField
from django.forms.widgets import HiddenInput
from django.utils.translation import ugettext_lazy as _
from c3nav.mapdata.models.package import Package
from c3nav.mapdata.permissions import get_unlocked_packages
from ..mapdata.models import Feature
class FeatureForm(ModelForm):
def __init__(self, *args, feature_type, **kwargs):
def __init__(self, *args, feature_type, request=None, **kwargs):
self.feature_type = feature_type
self.request = request
super().__init__(*args, **kwargs)
self.fields['level'].widget = HiddenInput()
self.fields['geometry'].widget = HiddenInput()
titles = OrderedDict((lang_code, '') for lang_code, language in settings.LANGUAGES)
if self.instance is not None and self.instance.pk:
self.fields['name'].widget.attrs['readonly'] = True
titles.update(self.instance.titles)
self.fields['name'].disabled = True
if not settings.DIRECT_EDITING:
self.fields['package'].widget = HiddenInput()
self.fields['package'].disabled = True
else:
unlocked_packages = get_unlocked_packages(request)
if len(unlocked_packages) == 1:
self.fields['package'].widget = HiddenInput()
self.fields['package'].initial = next(iter(unlocked_packages))
else:
self.fields['package'] = ModelChoiceField(
queryset=Package.objects.filter(name__in=unlocked_packages)
)
language_titles = dict(settings.LANGUAGES)
for language in titles.keys():
@ -36,14 +51,6 @@ class FeatureForm(ModelForm):
_('You have to select a title in at least one language.')
)
def clean_name(self):
if self.instance is not None and self.instance.pk and self.cleaned_data['name'] != self.instance.name:
raise ValidationError(
_('You cannot edit feature identifiers of existing objects.')
)
return self.cleaned_data['name']
def get_languages(self):
pass