forked from wiktor/spejstore-new
Render paths in parent autocomplete widget
This commit is contained in:
parent
60f60bd1f5
commit
6d365b8716
|
@ -10,6 +10,13 @@ class ItemSelectWidget(ModelSelect2Widget):
|
||||||
'description__icontains'
|
'description__icontains'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['data_view'] = 'item-complete'
|
||||||
|
super(ItemSelectWidget, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def label_from_instance(self, obj):
|
||||||
|
return obj.name
|
||||||
|
|
||||||
class ItemForm(forms.ModelForm):
|
class ItemForm(forms.ModelForm):
|
||||||
name = forms.CharField(widget=forms.TextInput())
|
name = forms.CharField(widget=forms.TextInput())
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,25 @@
|
||||||
<input type="submit" value="Save" class="hidden" name="_addanother" />
|
<input type="submit" value="Save" class="hidden" name="_addanother" />
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}{{ block.super }}
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
function fmt (state) {
|
||||||
|
if (!state.id) {
|
||||||
|
return state.text;
|
||||||
|
}
|
||||||
|
var result = $('<div><div><small></small></div><b></b></div>');
|
||||||
|
result.find('small').text(state.path.join(' → ')).css({
|
||||||
|
'opacity': 0.6,
|
||||||
|
'letter-spacing': -0.5
|
||||||
|
})
|
||||||
|
result.find('b').text(state.text)
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
$('.django-select2[name=parent]').djangoSelect2({
|
||||||
|
templateResult: fmt,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
from django.conf.urls import include, url
|
from django.conf.urls import include, url
|
||||||
from storage.views import index, search, item_display, label_lookup
|
from storage.views import index, search, item_display, label_lookup, ItemSelectView
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', index),
|
url(r'^$', index),
|
||||||
url(r'^search$', search),
|
url(r'^search$', search),
|
||||||
url(r'^item/(?P<pk>.*)$', item_display, name='item-display'),
|
url(r'^item/(?P<pk>.*)$', item_display, name='item-display'),
|
||||||
|
url(r'^autocomplete.json$', ItemSelectView.as_view(), name='item-complete'),
|
||||||
url(r'^(?P<pk>[^/]*)$', label_lookup, name='label-lookup'),
|
url(r'^(?P<pk>[^/]*)$', label_lookup, name='label-lookup'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
from storage.models import Item, Label
|
from storage.models import Item, Label
|
||||||
from django.contrib.postgres.search import SearchVector
|
from django.contrib.postgres.search import SearchVector
|
||||||
|
from django_select2.views import AutoResponseView
|
||||||
|
from django.http import Http404, JsonResponse
|
||||||
import shlex
|
import shlex
|
||||||
|
|
||||||
def apply_smart_search(query, objects):
|
def apply_smart_search(query, objects):
|
||||||
|
@ -69,3 +71,21 @@ def item_display(request, pk):
|
||||||
def label_lookup(request, pk):
|
def label_lookup(request, pk):
|
||||||
label = get_object_or_404(Label, pk=pk)
|
label = get_object_or_404(Label, pk=pk)
|
||||||
return redirect(label.item)
|
return redirect(label.item)
|
||||||
|
|
||||||
|
class ItemSelectView(AutoResponseView):
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
self.widget = self.get_widget_or_404()
|
||||||
|
self.term = kwargs.get('term', request.GET.get('term', ''))
|
||||||
|
self.object_list = self.get_queryset()
|
||||||
|
context = self.get_context_data()
|
||||||
|
return JsonResponse({
|
||||||
|
'results': [
|
||||||
|
{
|
||||||
|
'text': obj.name,
|
||||||
|
'path': [o.name for o in obj.get_ancestors()],
|
||||||
|
'id': obj.pk,
|
||||||
|
}
|
||||||
|
for obj in context['object_list']
|
||||||
|
],
|
||||||
|
'more': context['page_obj'].has_next()
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in New Issue