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:
@@ -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})
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user