Implement key parameter rendering for components. In Stock viewer still missing

This commit is contained in:
Mario Hüttel 2022-01-11 19:35:09 +01:00
parent ea623212bb
commit a566e198b8
4 changed files with 47 additions and 9 deletions

View File

@ -240,7 +240,34 @@ class Component(models.Model):
sum = 0 sum = 0
return sum return sum
def get_key_parameters(self):
"""
Get the key parameters of a component defined by its component type.
Returns a tuple of 3 elements. All three might be None
"""
p1 = None
p2 = None
p3 = None
if self.component_type:
t = (self.component_type.key_parameter1, self.component_type.key_parameter2, self.component_type.key_parameter3)
if t[0]:
p1 = ComponentParameter.objects.filter(component=self, parameter_type=t[0]).first()
if t[1]:
p2 = ComponentParameter.objects.filter(component=self, parameter_type=t[1]).first()
if t[2]:
p3 = ComponentParameter.objects.filter(component=self, parameter_type=t[2]).first()
return (p1, p2, p3)
def get_key_parameters_as_text(self):
params = self.get_key_parameters()
ret_strings = []
for p in params:
if p:
ret_strings.append(p.resolved_value_as_string())
return ret_strings
class ComponentParameter(models.Model): class ComponentParameter(models.Model):
class Meta: class Meta:
unique_together = ('component', 'parameter_type') unique_together = ('component', 'parameter_type')
@ -265,10 +292,12 @@ class ComponentParameter(models.Model):
if my_type == 'E' or my_type == 'I': if my_type == 'E' or my_type == 'I':
# Engineering float number # Engineering float number
(num, prefix) = NumConv.number_to_engineering(self.value, it_unit=(True if my_type=='I' else False)) (num, prefix) = NumConv.number_to_engineering(self.value, it_unit=(True if my_type=='I' else False))
return f'{num:.3f} {prefix}{self.parameter_type.unit}' num = round(num, 3)
return f'{num} {prefix}{self.parameter_type.unit}'
elif my_type == 'N': elif my_type == 'N':
# Standard float number # Standard float number
return f'{self.value:.3f} {self.parameter_type.unit}' num = round(self.value, 3)
return f'{num} {self.parameter_type.unit}'
elif my_type == 'F': elif my_type == 'F':
return self.text_value return self.text_value

View File

@ -19,6 +19,7 @@ from django.db import IntegrityError
from django.db.models import ProtectedError from django.db.models import ProtectedError
from .forms import * from .forms import *
from django.db.models import Q from django.db.models import Q
from django.db.models import Prefetch
from django.db.models.functions import Lower from django.db.models.functions import Lower
from django.forms import formset_factory from django.forms import formset_factory
import uuid import uuid
@ -149,7 +150,7 @@ class ComponentView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
default_page_size = 25 default_page_size = 25
def get_component_query_set(self, search_string): def get_component_query_set(self, search_string):
queryset = Component.objects.select_related('package', 'manufacturer').all() queryset = Component.objects.select_related('package', 'manufacturer', 'component_type').prefetch_related('componentparameter_set').all()
if search_string is None or search_string == '': if search_string is None or search_string == '':
return queryset return queryset
@ -621,7 +622,7 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView):
class ComponentDetailView(LoginRequiredMixin, BaseTemplateMixin, DetailView): class ComponentDetailView(LoginRequiredMixin, BaseTemplateMixin, DetailView):
template_name = 'parts/components-detail.html' template_name = 'parts/components-detail.html'
model = Component queryset = Component.objects.select_related('component_type', 'package', 'manufacturer').prefetch_related('componentparameter_set')
pk_url_kwarg = 'uuid' pk_url_kwarg = 'uuid'
base_title = '' base_title = ''
navbar_selected = 'Components' navbar_selected = 'Components'
@ -638,7 +639,10 @@ class ComponentDetailView(LoginRequiredMixin, BaseTemplateMixin, DetailView):
context['parameters'] = ComponentParameter.objects.filter(component=self.object).order_by('parameter_type__parameter_name') context['parameters'] = ComponentParameter.objects.filter(component=self.object).order_by('parameter_type__parameter_name')
if self.object.package: if self.object.package:
context['package_parameters'] = PackageParameter.objects.filter(package=self.object.package).order_by('parameter_type__parameter_name') context['package_parameters'] = PackageParameter.objects.filter(package=self.object.package).order_by('parameter_type__parameter_name')
parameter_texts = self.object.get_key_parameters_as_text()
context['key_parameter_string'] = ', '.join(parameter_texts)
return context return context
def handle_submit_edit_component_post(self, request, **kwargs): def handle_submit_edit_component_post(self, request, **kwargs):

View File

@ -39,7 +39,7 @@
<tbody> <tbody>
<tr> <tr>
<td class="align-middle" scope="row"> <td class="align-middle" scope="row">
{{component.name}} {{component.name}}{% if key_parameter_string %}<br><span class="text-secondary">{{key_parameter_string}}</span>{% endif %}
</td> </td>
<td class="align-middle" > <td class="align-middle" >
{% if component.package %} {% if component.package %}
@ -128,7 +128,7 @@
<td> <td>
{{param.resolved_value_as_string}} {{param.resolved_value_as_string}}
</td> </td>
<td><span class="text-info">from Package</span></td> <td><span class="text-secondary">from Package</span></td>
{% endfor %} {% endfor %}
{% for param in parameters %} {% for param in parameters %}
<tr> <tr>

View File

@ -48,7 +48,12 @@
{% endif %} {% endif %}
</div> </div>
<div class="flex-grow-1 ms-3"> <div class="flex-grow-1 ms-3">
<h6 class="mt-0 text-primary">{{ comp.name }}</h6> <h6 class="mt-0 text-primary">
{{ comp.name }}
{% for key_param in comp.get_key_parameters_as_text %}
{{key_param}}
{% endfor %}
</h6>
{% if comp.package %} {% if comp.package %}
Package: {{comp.package}}<br> Package: {{comp.package}}<br>
{% endif %} {% endif %}