diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-18 12:36:00 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-18 12:36:00 +0200 |
commit | 63d9dd174fc702e974ac29359585c69041582b6a (patch) | |
tree | 7709cfcbbf57c3157b1287ac97e82478b3f7787a | |
parent | 03986acbabef1d7868ca107964b8620e7385cb44 (diff) | |
download | Ishtar-63d9dd174fc702e974ac29359585c69041582b6a.tar.bz2 Ishtar-63d9dd174fc702e974ac29359585c69041582b6a.zip |
QA find basket: use autocomplete for existing baskets
-rw-r--r-- | archaeological_finds/forms.py | 35 | ||||
-rw-r--r-- | archaeological_finds/templates/ishtar/forms/qa_find_basket.html | 44 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/JQueryAutocomplete.js | 14 |
3 files changed, 46 insertions, 47 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 284b9a76c..aa29b57bf 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -681,11 +681,16 @@ class QAFindFormSingle(QAFindFormMulti): class QAFindBasketForm(IshtarForm): - create_or_update = forms.ChoiceField( - choices=(('create', _(u"Create")), - ('update', _(u"Update"))), initial='create') - label = forms.CharField(label="", max_length=None, required=False) - basket = forms.ChoiceField(label=_(u"Basket"), required=False, choices=[]) + qa_bf_create_or_update = forms.ChoiceField( + choices=(('create', _("Create")), + ('update', _("Update"))), initial='create') + qa_bf_label = forms.CharField(label="", max_length=None, required=False) + qa_bf_basket = forms.IntegerField( + label=_("Basket"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-findbasket-write'), + associated_model=models.FindBasket), + validators=[valid_id(models.FindBasket)], required=False) def __init__(self, *args, **kwargs): self.user = None @@ -696,20 +701,14 @@ class QAFindBasketForm(IshtarForm): self.items = kwargs.pop('items') super(QAFindBasketForm, self).__init__(*args, **kwargs) - if not self.user: - return - self.fields['basket'].choices = [ - (b.pk, "{} ({})".format(b.label, b.items.count())) - for b in models.FindBasket.objects.filter(user=self.user).distinct() - ] def clean(self): - if self.cleaned_data['create_or_update'] == 'update': - if not self.cleaned_data['basket']: + if self.cleaned_data['qa_bf_create_or_update'] == 'update': + if not self.cleaned_data['qa_bf_basket']: raise forms.ValidationError( _(u"On update, you have to select a basket.")) return self.cleaned_data - label = self.cleaned_data['label'].strip() + label = self.cleaned_data['qa_bf_label'].strip() if not label: raise forms.ValidationError(_(u"A label is required.")) if models.FindBasket.objects.filter(user=self.user, @@ -719,11 +718,11 @@ class QAFindBasketForm(IshtarForm): return self.cleaned_data def save(self, items): - if self.cleaned_data['create_or_update'] == 'update': + if self.cleaned_data['qa_bf_create_or_update'] == 'update': basket = models.FindBasket.objects.get( - user=self.user, pk=self.cleaned_data['basket']) + user=self.user, pk=self.cleaned_data['qa_bf_basket']) else: - label = self.cleaned_data['label'].strip() + label = self.cleaned_data['qa_bf_label'].strip() basket = models.FindBasket.objects.create( user=self.user, label=label) for item in items: @@ -1646,7 +1645,7 @@ class SelectFindBasketForm(IshtarForm): self.user = kwargs.pop('user') if hasattr(self.user, 'ishtaruser'): self.user = self.user.ishtaruser - super(SelectFindBasketWriteForm, self).__init__(*args, **kwargs) + super(SelectFindBasketForm, self).__init__(*args, **kwargs) class SelectFindBasketWriteForm(IshtarForm): diff --git a/archaeological_finds/templates/ishtar/forms/qa_find_basket.html b/archaeological_finds/templates/ishtar/forms/qa_find_basket.html index 77fc2abcd..c9224078a 100644 --- a/archaeological_finds/templates/ishtar/forms/qa_find_basket.html +++ b/archaeological_finds/templates/ishtar/forms/qa_find_basket.html @@ -15,31 +15,31 @@ </div>{% endif %} {% endfor %} - {% if form.basket %} + {% if form.qa_bf_basket %} <div class="form-row"> - <input type="radio" name="create_or_update" value="create" - id="create-choice" checked > - <label for="create-choice">{% trans "New" %}</label> + <input type="radio" name="qa_bf_create_or_update" value="create" + id="qa_bf_create-choice" checked > + <label for="qa_bf_create-choice">{% trans "New" %}</label> </div> {% else %} - <input type="hidden" name="create_or_update" value="create"> + <input type="hidden" name="qa_bf_create_or_update" value="create"> {% endif %} - <div id="new-basket"> + <div id="qa_bf_new-basket"> <div class="form-row"> - {% with form.label as field %} + {% with form.qa_bf_label as field %} {% include "blocks/bs_field_snippet.html" %} {% endwith %} </div> </div> - {% if form.basket %} + {% if form.qa_bf_basket %} <div class="form-row"> - <input type="radio" name="create_or_update" value="update" - id="update-choice"> - <label for="update-choice">{% trans "Add" %}</label> + <input type="radio" name="qa_bf_create_or_update" value="update" + id="qa_bf_update-choice"> + <label for="qa_bf_update-choice">{% trans "Add" %}</label> </div> - <div id="update-basket"> + <div id="qa_bf_update-basket"> <div class="form-row"> - {% with form.basket as field %} + {% with form.qa_bf_basket as field %} {% include "blocks/bs_field_snippet.html" %} {% endwith %} </div> @@ -48,20 +48,20 @@ {% endblock %} {% block js %} -var update_form_display = function(){ - if ($("#update-choice:checked").length){ - $("#new-basket").hide(); - $("#update-basket").show(); +var qa_bf_update_form_display = function(){ + if ($("#qa_bf_update-choice:checked").length){ + $("#qa_bf_new-basket").hide(); + $("#qa_bf_update-basket").show(); } else { - $("#update-basket").hide(); - $("#new-basket").show(); + $("#qa_bf_update-basket").hide(); + $("#qa_bf_new-basket").show(); } } $(document).ready(function(){ - $("#create-choice").click(update_form_display); - $("#update-choice").click(update_form_display); - update_form_display(); + $("#qa_bf_create-choice").click(qa_bf_update_form_display); + $("#qa_bf_update-choice").click(qa_bf_update_form_display); + qa_bf_update_form_display(); }); {% endblock %} diff --git a/ishtar_common/templates/blocks/JQueryAutocomplete.js b/ishtar_common/templates/blocks/JQueryAutocomplete.js index 2d2bbad9d..c9af9a58e 100644 --- a/ishtar_common/templates/blocks/JQueryAutocomplete.js +++ b/ishtar_common/templates/blocks/JQueryAutocomplete.js @@ -6,13 +6,13 @@ $(function() { $("#id_select_{{field_id}}").autocomplete({ source: source_{{field_id|replace_underscore}}, select: function( event, ui ) { - if(ui.item){ - $('#id_{{field_id}}').val(ui.item.id); - $('#id_{{field_id}}').change(); - } else { - $('#id_{{field_id}}').val(null); - } - }, + if(ui.item){ + $('#id_{{field_id}}').val(ui.item.id); + $('#id_{{field_id}}').change(); + } else { + $('#id_{{field_id}}').val(null); + } + }, minLength: 2{% if options %}, {{options}} {% endif %} |