diff --git a/assets/forms.py b/assets/forms.py index ef2fc9cb..82a00d25 100644 --- a/assets/forms.py +++ b/assets/forms.py @@ -25,3 +25,7 @@ class SupplierForm(forms.ModelForm): class Meta: model = models.Supplier fields = '__all__' + + +class SupplierSearchForm(forms.Form): + query = forms.CharField(required=False) diff --git a/assets/templates/asset_list.html b/assets/templates/asset_list.html index 5383ac41..601a2b4b 100644 --- a/assets/templates/asset_list.html +++ b/assets/templates/asset_list.html @@ -1,5 +1,5 @@ {% extends 'base_assets.html' %} -{% block title %}List{% endblock %} +{% block title %}Asset List{% endblock %} {% load paginator from filters %} {% load widget_tweaks %} diff --git a/assets/templates/supplier_list.html b/assets/templates/supplier_list.html index 2affb7f8..71ceb78c 100644 --- a/assets/templates/supplier_list.html +++ b/assets/templates/supplier_list.html @@ -1,6 +1,7 @@ {% extends 'base_assets.html' %} -{% block title %}List{% endblock %} +{% block title %}Supplier List{% endblock %} {% load paginator from filters %} +{% load widget_tweaks %} {% block content %} @@ -8,6 +9,15 @@

Supplier List

+
+ {% csrf_token %} +
+ {% render_field form.query|add_class:'form-control' placeholder='Search by Name' style="width: 250px"%} + + +
+
+ diff --git a/assets/urls.py b/assets/urls.py index fea65f6c..db99ea68 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -22,5 +22,7 @@ urlpatterns = [ path('supplier/create', permission_required_with_403('assets.create_supplier')(views.SupplierCreate.as_view()), name='supplier_create'), path('supplier//edit', permission_required_with_403('assets.edit_supplier')(views.SupplierUpdate.as_view()), name='supplier_update'), + path('supplier/search/', views.SupplierSearch.as_view(), name='supplier_search_json'), + path('', include(router.urls)), ] diff --git a/assets/views.py b/assets/views.py index 9d8493bb..e8e8353c 100644 --- a/assets/views.py +++ b/assets/views.py @@ -140,6 +140,42 @@ class SupplierList(generic.ListView): paginate_by = 40 ordering = ['name'] + def get_queryset(self): + if self.request.method == 'POST': + self.form = forms.SupplierSearchForm(data=self.request.POST) + elif self.request.method == 'GET': + self.form = forms.SupplierSearchForm(data=self.request.GET) + else: + self.form = forms.SupplierSearchForm(data={}) + form = self.form + if not form.is_valid(): + return self.model.objects.none() + + query_string = form.cleaned_data['query'] or "" + if len(query_string) == 0: + queryset = self.model.objects.all() + else: + queryset = self.model.objects.filter(Q(name__icontains=query_string)) + + return queryset + + def get_context_data(self, **kwargs): + context = super(SupplierList, self).get_context_data(**kwargs) + context["form"] = self.form + return context + + +class SupplierSearch(SupplierList): + hide_hidden_status = False + + def render_to_response(self, context, **response_kwargs): + result = [] + + for supplier in context["object_list"]: + result.append({"name": supplier.name}) + + return JsonResponse(result, safe=False) + class SupplierDetail(generic.DetailView): model = models.Supplier