2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-16 17:28:11 +00:00

Fix code for copying parameters from category

This commit is contained in:
Oliver Walters
2025-11-25 07:31:13 +00:00
parent 72607110be
commit e3c975e157
2 changed files with 38 additions and 23 deletions

View File

@@ -14,6 +14,7 @@ from typing import cast
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models, transaction from django.db import models, transaction
@@ -2417,26 +2418,37 @@ class Part(
This function is normally called when the Part is first created. This function is normally called when the Part is first created.
""" """
# TODO: https://github.com/inventree/InvenTree/pull/10699 from common.models import Parameter
# TODO: Reimplement this
# for template in templates:
# # First ensure that the part doesn't have that parameter
# if PartParameter.objects.filter(
# part=instance, template=template.parameter_template
# ).exists():
# continue
# try: from .models import PartCategoryParameterTemplate
# PartParameter.create(
# part=instance, categories = category.get_ancestors(include_self=True)
# template=template.parameter_template,
# data=template.default_value, category_templates = PartCategoryParameterTemplate.objects.filter(
# save=True, category__in=categories
# ) ).order_by('-category__level')
# except IntegrityError:
# logger.exception( parameters = []
# 'Could not create new PartParameter for part %s', instance content_type = ContentType.objects.get_for_model(Part)
# )
for category_template in category_templates:
# First ensure that the part doesn't have that parameter
if self.parameters_list.filter(
template=category_template.template
).exists():
continue
parameters.append(
Parameter(
template=category_template.template,
model_type=content_type,
model_id=self.pk,
data=category_template.default_value,
)
)
if len(parameters) > 0:
Parameter.objects.bulk_create(parameters)
def getTestTemplates( def getTestTemplates(
self, required=None, include_parent: bool = True, enabled=None self, required=None, include_parent: bool = True, enabled=None
@@ -3734,8 +3746,8 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel):
def __str__(self): def __str__(self):
"""String representation of a PartCategoryParameterTemplate (admin interface).""" """String representation of a PartCategoryParameterTemplate (admin interface)."""
if self.default_value: if self.default_value:
return f'{self.category.name} | {self.parameter_template.name} | {self.default_value}' return f'{self.category.name} | {self.template.name} | {self.default_value}'
return f'{self.category.name} | {self.parameter_template.name}' return f'{self.category.name} | {self.template.name}'
def clean(self): def clean(self):
"""Validate this PartCategoryParameterTemplate instance. """Validate this PartCategoryParameterTemplate instance.
@@ -3753,11 +3765,11 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel):
and get_global_setting( and get_global_setting(
'PART_PARAMETER_ENFORCE_UNITS', True, cache=False, create=False 'PART_PARAMETER_ENFORCE_UNITS', True, cache=False, create=False
) )
and self.parameter_template.units and self.template.units
): ):
try: try:
InvenTree.conversion.convert_physical_value( InvenTree.conversion.convert_physical_value(
self.default_value, self.parameter_template.units self.default_value, self.template.units
) )
except ValidationError as e: except ValidationError as e:
raise ValidationError({'default_value': e.message}) raise ValidationError({'default_value': e.message})

View File

@@ -343,6 +343,9 @@ def parameter(
Returns: Returns:
A Parameter object, or None if not found A Parameter object, or None if not found
""" """
if not hasattr(instance, 'parameters'):
raise TypeError("parameter tag requires a Model with 'parameters' attribute")
return ( return (
instance.parameters.prefetch_related('template') instance.parameters.prefetch_related('template')
.filter(template__name=parameter_name) .filter(template__name=parameter_name)