Reworked mandatory fields to submit an annotation (only one of title, description or tags is required) #19
authordurandn
Fri, 16 Sep 2016 16:19:40 +0200
changeset 187 456d13962c0d
parent 186 5dcc09a350a6
child 188 3b9f10d7c69b
Reworked mandatory fields to submit an annotation (only one of title, description or tags is required) #19
src/iconolab/forms/annotations.py
src/iconolab/templates/iconolab/change_annotation.html
--- a/src/iconolab/forms/annotations.py	Fri Sep 16 16:19:01 2016 +0200
+++ b/src/iconolab/forms/annotations.py	Fri Sep 16 16:19:40 2016 +0200
@@ -1,6 +1,8 @@
 from django import forms
 from iconolab.models import AnnotationRevision
-import json
+import json, logging
+
+logger = logging.getLogger(__name__)
 
 class MultipleTagsField(forms.TypedMultipleChoiceField):
     pass
@@ -16,6 +18,17 @@
             'fragment': forms.HiddenInput(),
             'tags': forms.HiddenInput()
         }
+        
+    def __init__(self, *args, **kwargs):
+        super(AnnotationRevisionForm, self).__init__(*args, **kwargs)
+        for key in self.fields:
+            if key != "comment":
+                self.fields[key].required = False
+        
+    def clean(self, *args, **kwargs):
+        cleaned_data = super(AnnotationRevisionForm, self).clean(*args, **kwargs)
+        if not (cleaned_data.get("title", "") or cleaned_data.get("description", "") or json.loads(cleaned_data.get("tags", "[]"))):
+            raise forms.ValidationError("Au moins un de ces champs doit être renseigné: description, titre ou mot-clé", code="missing_fields")
     
     def tags_json(self):
         if self.instance:
--- a/src/iconolab/templates/iconolab/change_annotation.html	Fri Sep 16 16:19:01 2016 +0200
+++ b/src/iconolab/templates/iconolab/change_annotation.html	Fri Sep 16 16:19:40 2016 +0200
@@ -90,7 +90,15 @@
 
 			<div class='col-md-6' style="">
 				 <form class="form" action="{% if annotation %}{% url 'annotation_edit' collection_name image_guid annotation_guid %}{% else %}{% url 'annotation_create' collection_name image_guid %}{% endif %}" method="POST">
-				 	{% if form.errors %}
+				 	{% if form.non_field_errors %}
+                        <div class="alert alert-danger" role="alert">
+                          <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+                          <span class="sr-only">Erreur:</span>
+                            {{ form.non_field_errors | striptags }}
+                        </div>
+                      {% endif %}
+          
+                    {% if form.errors %}
                     <div id="errors" style="display: none;">
                         {% for field in form %}
                           {% if field.errors %}
@@ -105,7 +113,7 @@
                       {% if form.title.errors %}
                         <div class="alert alert-danger" role="alert">
                           <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
-                          <span class="sr-only">Error:</span>
+                          <span class="sr-only">Erreur:</span>
                             {{ form.title.errors | striptags }}
                         </div>
                       {% endif %}
@@ -118,7 +126,7 @@
                       {% if form.description.errors %}
                         <div class="alert alert-danger" role="alert">
                           <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
-                          <span class="sr-only">Error:</span>
+                          <span class="sr-only">Erreur:</span>
                             {{ form.description.errors | striptags }}
                         </div>
                       {% endif %}
@@ -128,6 +136,13 @@
                     </fieldset>
                     <fieldset class="form-group">
                       <label class="control-label" for="id_{{ form.tags.name }}">{{ form.tags.label }}</label>
+                      {% if form.tags.errors %}
+                        <div class="alert alert-danger" role="alert">
+                          <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+                          <span class="sr-only">Erreur:</span>
+                            {{ form.tags.errors | striptags }}
+                        </div>
+                      {% endif %}
                       <typeahead :tags="{{ tags_data  }}"></typeahead>
                     </fieldset>
 
@@ -136,7 +151,7 @@
                       {% if form.comment.errors %}
                         <div class="alert alert-danger" role="alert">
                           <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
-                          <span class="sr-only">Error:</span>
+                          <span class="sr-only">Erreur:</span>
                             {{ form.comment.errors | striptags }}
                         </div>
                       {% endif %}