diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-04-12 13:25:03 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-04-12 13:25:03 +0200 |
commit | 75f27ba450a1658605c12255298769192d9483a0 (patch) | |
tree | 0fa56b7f5a6c9b65a61d711ae817f46cb04f45e4 | |
parent | cfac5917a5677bfac99d57441c3be98e65d4be15 (diff) | |
download | Chimère-75f27ba450a1658605c12255298769192d9483a0.tar.bz2 Chimère-75f27ba450a1658605c12255298769192d9483a0.zip |
Admin: allow to manage route directly with a GPX file
-rw-r--r-- | chimere/admin.py | 9 | ||||
-rw-r--r-- | chimere/forms.py | 20 |
2 files changed, 26 insertions, 3 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 6938fca..d54986c 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -49,7 +49,7 @@ from chimere.models import Category, Icon, SubCategory, Marker, \ PropertyModel, News, Route, Area, ColorTheme, Color, \ MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\ PropertyModelChoice, Page, get_areas_for_user, Overlay, \ - ImporterKeyCategories, SubCategoryUserLimit, AreaOverlays + ImporterKeyCategories, SubCategoryUserLimit, AreaOverlays, RouteFile from chimere.utils import ShapefileManager, KMLManager, CSVManager @@ -306,7 +306,8 @@ ROUTE_FIELDSETS = deepcopy(MARKER_FIELDSETS) ROUTE_FIELDSETS[0][1]['fields'][0] = 'route' ROUTE_FIELDSETS[0][1]['fields'].pop(ROUTE_FIELDSETS[0][1]['fields'].index( 'description')) -ROUTE_FIELDSETS[3][1]['fields'] = ('ref_item', 'associated_file',) +ROUTE_FIELDSETS[3][1]['fields'] = ('ref_item', 'associated_file', + 'read_from_file') POLYGON_FIELDSETS = deepcopy(MARKER_FIELDSETS) POLYGON_FIELDSETS[0][1]['fields'][0] = 'polygon' POLYGON_FIELDSETS[0][1]['fields'].pop(POLYGON_FIELDSETS[0][1]['fields'].index( @@ -405,6 +406,8 @@ class PictureRouteInline(PictureMarkerInline): class MultimediaRouteInline(MultimediaMarkerInline): exclude = ('polygon', 'marker') +admin.site.register(RouteFile) + class RouteAdmin(MarkerAdmin): """ @@ -415,7 +418,7 @@ class RouteAdmin(MarkerAdmin): list_filter = ('status', AreaRouteListFilter, 'categories') exclude = ['height', 'width'] form = RouteAdminForm - readonly_fields = ('associated_file', 'ref_item') + readonly_fields = ('ref_item',) actions = [validate, disable, managed_modified, export_to_kml, export_to_shapefile, export_to_csv] fieldsets = ROUTE_FIELDSETS diff --git a/chimere/forms.py b/chimere/forms.py index 33da85d..352a7b1 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -469,10 +469,15 @@ class RouteAdminForm(forms.ModelForm): """ is_admin = True name = forms.CharField(label=_("Name"), required=True) + read_from_file = forms.BooleanField( + label=_("Lire la géométrie depuis le fichier"), required=False) class Meta: model = Route exclude = [] + widgets = { + 'categories': forms.SelectMultiple + } def __init__(self, *args, **keys): """ @@ -500,7 +505,11 @@ class RouteAdminForm(forms.ModelForm): if 'subcategories' in keys else [] super(RouteAdminForm, self).__init__(*args, **keys) if self.is_admin: + self.fields['route'].required = False + self.fields['categories'].widget = forms.SelectMultiple( + choices=self.fields['categories'].choices) return + self.fields.pop('read_from_file') if not settings.CHIMERE_SEARCH_ENGINE and 'keywords' in self.fields: self.fields.pop('keywords') if settings.CHIMERE_DAYS_BEFORE_EVENT: @@ -518,6 +527,17 @@ class RouteAdminForm(forms.ModelForm): continue self.fields.pop(k) + def clean(self): + if self.cleaned_data.get('read_from_file', None) and \ + self.cleaned_data.get('associated_file', None): + self.cleaned_data['associated_file'].process() + self.cleaned_data['route'] = \ + self.cleaned_data['associated_file'].route + if not self.cleaned_data.get('route', None): + raise forms.ValidationError("Vous devez rentrer un trajet ou lire " + "celui-ci depuis un fichier.") + return self.cleaned_data + def save(self, *args, **keys): """ Custom save method in order to manage associated properties |