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

View file

@ -20,7 +20,7 @@ def add_feature(request, feature_type):
raise Http404()
if request.method == 'POST':
form = FeatureForm(request.POST, feature_type=feature_type)
form = FeatureForm(request.POST, feature_type=feature_type, request=request)
if form.is_valid():
feature = form.instance
feature.feature_type = feature_type.name
@ -38,7 +38,7 @@ def add_feature(request, feature_type):
return render(request, 'editor/feature_success.html', {})
else:
form = FeatureForm(feature_type=feature_type)
form = FeatureForm(feature_type=feature_type, request=request)
return render(request, 'editor/feature.html', {
'form': form,
@ -71,7 +71,7 @@ def edit_feature(request, name):
'path': request.path
})
form = FeatureForm(instance=feature, data=request.POST, feature_type=feature_type)
form = FeatureForm(instance=feature, data=request.POST, feature_type=feature_type, request=request)
if form.is_valid():
feature = form.instance
feature.feature_type = feature_type.name
@ -89,7 +89,7 @@ def edit_feature(request, name):
return render(request, 'editor/feature_success.html', {})
else:
form = FeatureForm(instance=feature, feature_type=feature_type)
form = FeatureForm(instance=feature, feature_type=feature_type, request=request)
return render(request, 'editor/feature.html', {
'form': form,