Add comparison method for parameter search
This commit is contained in:
parent
a34557499a
commit
2bc0f3124c
@ -263,9 +263,17 @@ class AdvancedComponentSearchForm(forms.Form):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
PARAMETER_COMPARISON_TYPES = (
|
||||||
|
('eq', '=='),
|
||||||
|
('lte', '<='),
|
||||||
|
('gte', '>='),
|
||||||
|
)
|
||||||
|
|
||||||
class ComponentParameterSearchForm(forms.Form):
|
class ComponentParameterSearchForm(forms.Form):
|
||||||
parameter = AutocompleteForeingKeyField(required=True, foreign_model=parts_models.ComponentParameterType, api_search_url='componentparametertype-list', image_field_name=None, name_field_name='parameter_name')
|
parameter = AutocompleteForeingKeyField(required=True, foreign_model=parts_models.ComponentParameterType, api_search_url='componentparametertype-list', image_field_name=None, name_field_name='parameter_name')
|
||||||
value = forms.CharField(max_length=100, required=False)
|
value = forms.CharField(max_length=100, required=False)
|
||||||
|
compare_method = forms.ChoiceField(choices=PARAMETER_COMPARISON_TYPES, required=True, initial=1)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
@ -275,6 +283,7 @@ class ComponentParameterSearchForm(forms.Form):
|
|||||||
self.helper.layout = Layout(
|
self.helper.layout = Layout(
|
||||||
Row(
|
Row(
|
||||||
Column('parameter'),
|
Column('parameter'),
|
||||||
|
Column('compare_method'),
|
||||||
Column('value')
|
Column('value')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -23,7 +23,7 @@ from django.db.models.functions import Lower
|
|||||||
from django.forms import formset_factory
|
from django.forms import formset_factory
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
ParameterSearchFormSet = formset_factory(ComponentParameterSearchForm, extra=2)
|
ParameterSearchFormSet = formset_factory(ComponentParameterSearchForm, extra=1)
|
||||||
|
|
||||||
class QrSearchForm(forms.Form):
|
class QrSearchForm(forms.Form):
|
||||||
my_qr_validator = QrCodeValidator()
|
my_qr_validator = QrCodeValidator()
|
||||||
@ -181,15 +181,19 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
|||||||
queryset = queryset.filter(manufacturer=cleaned_data['manufacturer'])
|
queryset = queryset.filter(manufacturer=cleaned_data['manufacturer'])
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def filter_queryset_with_parameters(self, queryset, parameter, value):
|
def filter_queryset_with_parameters(self, queryset, parameter, value, compare_method):
|
||||||
if parameter and (value is None or value == ''):
|
if parameter and (value is None or value == ''):
|
||||||
return queryset.filter(Q(componentparameter__parameter_type=parameter))
|
return queryset.filter(Q(componentparameter__parameter_type=parameter))
|
||||||
elif parameter and value is not None:
|
elif parameter and value is not None:
|
||||||
if parameter.parameter_type == 'F':
|
if parameter.parameter_type == 'F':
|
||||||
return queryset.filter(Q(componentparameter__text_value__icontains=value))
|
return queryset.filter(Q(componentparameter__text_value__icontains=value) & Q(componentparameter__parameter_type=parameter))
|
||||||
else:
|
else:
|
||||||
return queryset.filter(Q(componentparameter__value=value))
|
if compare_method == 'lte': # <=
|
||||||
|
return queryset.filter(Q(componentparameter__value__lte=value) & Q(componentparameter__parameter_type=parameter))
|
||||||
|
elif compare_method == 'gte': # >=
|
||||||
|
return queryset.filter(Q(componentparameter__value__gte=value) & Q(componentparameter__parameter_type=parameter))
|
||||||
|
else:
|
||||||
|
return queryset.filter(Q(componentparameter__value=value) & Q(componentparameter__parameter_type=parameter))
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def get_context_data_int(self, advanced_search, parameter_formset : ParameterSearchFormSet, **kwargs):
|
def get_context_data_int(self, advanced_search, parameter_formset : ParameterSearchFormSet, **kwargs):
|
||||||
@ -212,8 +216,7 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
|||||||
for f in parameter_formset:
|
for f in parameter_formset:
|
||||||
# If the form is valid and has changed compared to its initial empty state
|
# If the form is valid and has changed compared to its initial empty state
|
||||||
if f.is_valid() and f.has_changed():
|
if f.is_valid() and f.has_changed():
|
||||||
print(f.cleaned_data)
|
paginator_queryset = self.filter_queryset_with_parameters(paginator_queryset, f.cleaned_data['parameter'], f.cleaned_data['value'], f.cleaned_data['compare_method'])
|
||||||
paginator_queryset = self.filter_queryset_with_parameters(paginator_queryset, f.cleaned_data['parameter'], f.cleaned_data['value'])
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -228,8 +231,6 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
|||||||
|
|
||||||
if not parameter_formset:
|
if not parameter_formset:
|
||||||
context['advanced_search_param_formset'] = ParameterSearchFormSet()
|
context['advanced_search_param_formset'] = ParameterSearchFormSet()
|
||||||
|
|
||||||
|
|
||||||
if not advanced_search:
|
if not advanced_search:
|
||||||
context['advanced_search_form'] = AdvancedComponentSearchForm(auto_id='adv_search_%s')
|
context['advanced_search_form'] = AdvancedComponentSearchForm(auto_id='adv_search_%s')
|
||||||
|
|
||||||
@ -239,7 +240,7 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
|||||||
adv_search_form = None
|
adv_search_form = None
|
||||||
adv_param_search_formset = None
|
adv_param_search_formset = None
|
||||||
if 'submit-advanced-search' in self.request.GET:
|
if 'submit-advanced-search' in self.request.GET:
|
||||||
adv_search_form = AdvancedComponentSearchForm(data=self.request.GET)
|
adv_search_form = AdvancedComponentSearchForm(auto_id='adv_search_%s', data=self.request.GET)
|
||||||
adv_param_search_formset = ParameterSearchFormSet(data=self.request.GET)
|
adv_param_search_formset = ParameterSearchFormSet(data=self.request.GET)
|
||||||
if adv_search_form.is_valid():
|
if adv_search_form.is_valid():
|
||||||
print('Advanced search valid')
|
print('Advanced search valid')
|
||||||
|
Loading…
Reference in New Issue
Block a user