2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-15 19:45:46 +00:00

Parameter by name (#5055)

* Add method get_parameter

- Return a parameter for a part, on name

* Add unit test for new method

* Adds template tag to retrieve parameter based on name

* Update docs
This commit is contained in:
Oliver
2023-06-16 12:14:17 +10:00
committed by GitHub
parent 51cece9e07
commit 31ff3599eb
6 changed files with 122 additions and 4 deletions

View File

@ -2176,6 +2176,16 @@ class Part(InvenTreeBarcodeMixin, InvenTreeNotesMixin, MetadataMixin, MPTTModel)
return quantity
def get_parameter(self, name):
"""Return the parameter with the given name.
If no matching parameter is found, return None.
"""
try:
return self.parameters.get(template__name=name)
except PartParameter.DoesNotExist:
return None
def get_parameters(self):
"""Return all parameters for this part, ordered by name."""
return self.parameters.order_by('template__name')
@ -3598,6 +3608,21 @@ class PartParameter(MetadataMixin, models.Model):
blank=True,
)
@property
def units(self):
"""Return the units associated with the template"""
return self.template.units
@property
def name(self):
"""Return the name of the template"""
return self.template.name
@property
def description(self):
"""Return the description of the template"""
return self.template.description
@classmethod
def create(cls, part, template, data, save=False):
"""Custom save method for the PartParameter class"""

View File

@ -63,6 +63,20 @@ class TestParams(TestCase):
self.assertEqual(len(p.metadata.keys()), 4)
def test_get_parameter(self):
"""Test the Part.get_parameter method"""
prt = Part.objects.get(pk=3)
# Check that we can get a parameter by name
for name in ['Length', 'Width', 'Thickness']:
param = prt.get_parameter(name)
self.assertEqual(param.template.name, name)
# Check that an incorrect name returns None
param = prt.get_parameter('Not a parameter')
self.assertIsNone(param)
class TestCategoryTemplates(TransactionTestCase):
"""Test class for PartCategoryParameterTemplate model"""

View File

@ -181,7 +181,7 @@ def encode_svg_image(filename):
@register.simple_tag()
def part_image(part):
def part_image(part: Part):
"""Return a fully-qualified path for a part image.
Arguments:
@ -200,6 +200,23 @@ def part_image(part):
return uploaded_image(img)
@register.simple_tag()
def part_parameter(part: Part, parameter_name: str):
"""Return a PartParameter object for the given part and parameter name
Arguments:
part: A Part object
parameter_name: The name of the parameter to retrieve
Returns:
A PartParameter object, or None if not found
"""
if type(part) is Part:
return part.get_parameter(parameter_name)
else:
return None
@register.simple_tag()
def company_image(company):
"""Return a fully-qualified path for a company image.