Start advanced search

This commit is contained in:
2022-01-02 20:00:29 +01:00
parent 3c51c2485c
commit 5c9f0d0f0a
4 changed files with 109 additions and 6 deletions

View File

@@ -157,20 +157,57 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
return queryset
def get_context_data(self, **kwargs):
def get_component_queryset_from_advanced_search(self, cleaned_data):
queryset = Component.objects.all()
if cleaned_data['name']:
queryset = queryset.filter(Q(name__icontains=cleaned_data['name']))
if cleaned_data['package']:
queryset = queryset.filter(package=cleaned_data['package'])
if cleaned_data['package_pin_count']:
queryset = queryset.filter(package__pin_count=cleaned_data['package_pin_count'])
if cleaned_data['component_type']:
queryset = queryset.filter(component_type=cleaned_data['component_type'])
if cleaned_data['distributor_num']:
if cleaned_data['distributor']:
distri = cleaned_data['distributor']
queryset = queryset.filter(Q(distributornum__distributor_part_number__icontains=cleaned_data['distributor_num']) & Q(distributornum__distributor=distri))
else:
queryset = queryset.filter(Q(distributornum__distributor_part_number__icontains=cleaned_data['distributor_num']))
if cleaned_data['manufacturer']:
queryset = queryset.filter(manufacturer=cleaned_data['manufacturer'])
return queryset
def get_context_data_int(self, advanced_search, **kwargs):
context = super().get_context_data(**kwargs)
comp_page_num = self.request.GET.get('comp_page', default=1)
search = self.request.GET.get('search', default=None)
if advanced_search:
search = None
context['advanced_search_shown'] = True
context['advanced_search_form'] = advanced_search
if advanced_search.is_valid():
paginator_queryset = self.get_component_queryset_from_advanced_search(advanced_search.cleaned_data)
else:
paginator_queryset = Component.objects.all()
else:
search = self.request.GET.get('search', default=None)
paginator_queryset = self.get_component_query_set(search)
comp_paginator = Paginator(self.get_component_query_set(search), self.default_page_size)
comp_paginator = Paginator(paginator_queryset, self.default_page_size)
context['components'] = comp_paginator.get_page(comp_page_num)
context['comp_form'] = ComponentForm()
context['search_string'] = search
if not advanced_search:
context['advanced_search_form'] = AdvancedComponentSearchForm(auto_id='adv_search_%s')
return context
def get_context_data(self, **kwargs):
return self.get_context_data_int(advanced_search = None, **kwargs)
def handle_new_component_post(self, request, **kwargs):
cform = ComponentForm(data=request.POST, files=request.FILES)
@@ -181,10 +218,23 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
if not cform.is_valid():
context['comp_form'] = cform
return self.render_to_response(context)
def handle_advanced_search_post(self, request, **kwargs):
form = AdvancedComponentSearchForm(auto_id='adv_search_%s', data=request.POST)
if form.is_valid():
print('Valid')
context = self.get_context_data_int(form, **kwargs)
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
if 'submit-edit-component' in request.POST:
return self.handle_new_component_post(request, **kwargs)
elif 'submit-advanced-search' in request.POST:
return self.handle_advanced_search_post(request, **kwargs)
else:
return super().post(request, *args, **kwargs)