2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-16 09:18:10 +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.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models, transaction
@@ -2417,26 +2418,37 @@ class Part(
This function is normally called when the Part is first created.
"""
# TODO: https://github.com/inventree/InvenTree/pull/10699
# 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
from common.models import Parameter
# try:
# PartParameter.create(
# part=instance,
# template=template.parameter_template,
# data=template.default_value,
# save=True,
# )
# except IntegrityError:
# logger.exception(
# 'Could not create new PartParameter for part %s', instance
# )
from .models import PartCategoryParameterTemplate
categories = category.get_ancestors(include_self=True)
category_templates = PartCategoryParameterTemplate.objects.filter(
category__in=categories
).order_by('-category__level')
parameters = []
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(
self, required=None, include_parent: bool = True, enabled=None
@@ -3734,8 +3746,8 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel):
def __str__(self):
"""String representation of a PartCategoryParameterTemplate (admin interface)."""
if self.default_value:
return f'{self.category.name} | {self.parameter_template.name} | {self.default_value}'
return f'{self.category.name} | {self.parameter_template.name}'
return f'{self.category.name} | {self.template.name} | {self.default_value}'
return f'{self.category.name} | {self.template.name}'
def clean(self):
"""Validate this PartCategoryParameterTemplate instance.
@@ -3753,11 +3765,11 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel):
and get_global_setting(
'PART_PARAMETER_ENFORCE_UNITS', True, cache=False, create=False
)
and self.parameter_template.units
and self.template.units
):
try:
InvenTree.conversion.convert_physical_value(
self.default_value, self.parameter_template.units
self.default_value, self.template.units
)
except ValidationError as e:
raise ValidationError({'default_value': e.message})

View File

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