Hack ugly formset search. Must rewrite this
This commit is contained in:
parent
a3fc0e8447
commit
2d83c9ceec
@ -276,6 +276,29 @@ class ComponentParameterSearchForm(forms.Form):
|
|||||||
Column('value')
|
Column('value')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super().clean()
|
||||||
|
parameter = cleaned_data.get('parameter')
|
||||||
|
value = cleaned_data.get('value')
|
||||||
|
|
||||||
|
if value != '' or value != None:
|
||||||
|
value = value.strip()
|
||||||
|
|
||||||
|
if value == '' or value == None:
|
||||||
|
cleaned_data['value'] = None
|
||||||
|
value = None
|
||||||
|
|
||||||
|
if parameter and value is not None and value != '':
|
||||||
|
if parameter.parameter_type != 'F':
|
||||||
|
try:
|
||||||
|
cleaned_data['value'] = EngineeringNumberConverter.engineering_to_number(value)
|
||||||
|
except:
|
||||||
|
raise ValidationError('Cannot convert value to number')
|
||||||
|
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
|
|
||||||
class ComponentParameterCreateForm(forms.Form):
|
class ComponentParameterCreateForm(forms.Form):
|
||||||
parameter_type = AutocompleteForeingKeyField(required=True, foreign_model=parts_models.ComponentParameterType, api_search_url='componentparametertype-list', image_field_name=None, name_field_name='descriptive_name')
|
parameter_type = AutocompleteForeingKeyField(required=True, foreign_model=parts_models.ComponentParameterType, api_search_url='componentparametertype-list', image_field_name=None, name_field_name='descriptive_name')
|
||||||
value = forms.CharField(required=True, max_length=256)
|
value = forms.CharField(required=True, max_length=256)
|
||||||
|
@ -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=1)
|
ParameterSearchFormSet = formset_factory(ComponentParameterSearchForm, extra=2)
|
||||||
|
|
||||||
class QrSearchForm(forms.Form):
|
class QrSearchForm(forms.Form):
|
||||||
my_qr_validator = QrCodeValidator()
|
my_qr_validator = QrCodeValidator()
|
||||||
@ -181,6 +181,17 @@ 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):
|
||||||
|
if parameter and (value is None or value == ''):
|
||||||
|
return queryset.filter(Q(componentparameter__parameter_type=parameter))
|
||||||
|
elif parameter and value is not None:
|
||||||
|
if parameter.parameter_type == 'F':
|
||||||
|
return queryset.filter(Q(componentparameter__text_value__icontains=value))
|
||||||
|
else:
|
||||||
|
return queryset.filter(Q(componentparameter__value=value))
|
||||||
|
|
||||||
|
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):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
@ -198,7 +209,12 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
|||||||
|
|
||||||
if parameter_formset.is_valid():
|
if parameter_formset.is_valid():
|
||||||
# Process parameters
|
# Process parameters
|
||||||
pass
|
for f in parameter_formset:
|
||||||
|
# If the form is valid and has changed compared to its initial empty state
|
||||||
|
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'])
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
search = self.request.GET.get('search', default=None)
|
search = self.request.GET.get('search', default=None)
|
||||||
@ -557,9 +573,10 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView):
|
|||||||
if edit_form.is_valid():
|
if edit_form.is_valid():
|
||||||
edit_form.save()
|
edit_form.save()
|
||||||
else:
|
else:
|
||||||
pass # Todo: Handle error
|
pass
|
||||||
|
|
||||||
context = self.get_context_data(**kwargs)
|
context = self.get_context_data(**kwargs)
|
||||||
|
|
||||||
return self.render_to_response(context)
|
return self.render_to_response(context)
|
||||||
|
|
||||||
def handle_amount_change_post(self, request, increase, **kwargs):
|
def handle_amount_change_post(self, request, increase, **kwargs):
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
<input type="submit" name="submit-advanced-search" value="Search" class="btn btn-success">
|
<input type="submit" name="submit-advanced-search" value="Search" class="btn btn-success">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
<template id="advanced-search-parameter-template">
|
||||||
|
{% crispy advanced_search_param_formset.empty_form %}
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="list-group mb-3">
|
<div class="list-group mb-3">
|
||||||
{% for comp in components %}
|
{% for comp in components %}
|
||||||
|
Loading…
Reference in New Issue
Block a user