Reworked mandatory fields to submit an annotation (only one of title, description or tags is required) #19
--- 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 %}