From df48df8119f60f7b4d52e9d2068bab7b4e3e8b2e Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 21 Jul 2021 21:10:31 +1000 Subject: [PATCH] Catch recursive tree error for part / variant relationship --- InvenTree/part/models.py | 8 +++++++- InvenTree/templates/js/forms.js | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 23436a7d6a..d5e039ca77 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -27,6 +27,7 @@ from markdownx.models import MarkdownxField from django_cleanup import cleanup from mptt.models import TreeForeignKey, MPTTModel +from mptt.exceptions import InvalidMove from mptt.managers import TreeManager from stdimage.models import StdImageField @@ -426,7 +427,12 @@ class Part(MPTTModel): self.full_clean() - super().save(*args, **kwargs) + try: + super().save(*args, **kwargs) + except InvalidMove: + raise ValidationError({ + 'variant_of': _('Invalid choice for parent part'), + }) if add_category_templates: # Get part category diff --git a/InvenTree/templates/js/forms.js b/InvenTree/templates/js/forms.js index 587ea07a16..4801ec77eb 100644 --- a/InvenTree/templates/js/forms.js +++ b/InvenTree/templates/js/forms.js @@ -350,6 +350,12 @@ function constructFormBody(fields, options) { for(field in fields) { fields[field].name = field; + + // If any "instance_filters" are defined for the endpoint, copy them across (overwrite) + if (fields[field].instance_filters) { + fields[field].filters = Object.assign(fields[field].filters || {}, fields[field].instance_filters); + } + var field_options = displayed_fields[field]; // Copy custom options across to the fields object