diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 8383431caa..385bae7bf4 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -858,13 +858,19 @@ class BomItem(models.Model): """ # A part cannot refer to itself in its BOM - if self.part == self.sub_part: - raise ValidationError({'sub_part': _('Part cannot be added to its own Bill of Materials')}) - - # Test for simple recursion - for item in self.sub_part.bom_items.all(): - if self.part == item.sub_part: - raise ValidationError({'sub_part': _("Part '{p1}' is used in BOM for '{p2}' (recursive)".format(p1=str(self.part), p2=str(self.sub_part)))}) + try: + if self.sub_part is not None and self.part is not None: + if self.part == self.sub_part: + raise ValidationError({'sub_part': _('Part cannot be added to its own Bill of Materials')}) + + # Test for simple recursion + for item in self.sub_part.bom_items.all(): + if self.part == item.sub_part: + raise ValidationError({'sub_part': _("Part '{p1}' is used in BOM for '{p2}' (recursive)".format(p1=str(self.part), p2=str(self.sub_part)))}) + + except Part.DoesNotExist: + # A blank Part will be caught elsewhere + pass class Meta: verbose_name = "BOM Item"