diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index cc5bfc0db1..b0a96c8759 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -678,6 +678,18 @@ class Part(models.Model):
parts.append(bom.sub_part)
return parts
+ def get_allowed_bom_items(self):
+ """ Return a list of parts which can be added to a BOM for this part.
+
+ - Exclude parts which are not 'component' parts
+ - Exclude parts which this part is in the BOM for
+ """
+
+ parts = Part.objects.filter(component=True)
+ parts = parts.exclude(id__in=[part.id for part in self.used_in.all()])
+
+ return parts
+
@property
def supplier_count(self):
""" Return the number of supplier parts available for this part """
diff --git a/InvenTree/part/templates/part/bom_upload/select_parts.html b/InvenTree/part/templates/part/bom_upload/select_parts.html
index cfdf06ddc1..9904175be5 100644
--- a/InvenTree/part/templates/part/bom_upload/select_parts.html
+++ b/InvenTree/part/templates/part/bom_upload/select_parts.html
@@ -49,6 +49,9 @@
{% if item.column.guess == 'Part' %}
{{ item.cell }}
diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py
index 8183b44044..89ba6b2bf9 100644
--- a/InvenTree/part/views.py
+++ b/InvenTree/part/views.py
@@ -654,6 +654,7 @@ class BomUpload(FormView):
bom_columns = []
bom_rows = []
missing_columns = []
+ allowed_parts = []
def get_success_url(self):
@@ -703,9 +704,16 @@ class BomUpload(FormView):
ctx['bom_columns'] = self.bom_columns
ctx['bom_rows'] = rows
ctx['missing_columns'] = self.missing_columns
+ ctx['allowed_parts_list'] = self.allowed_parts
return ctx
+ def getAllowedParts(self):
+ """ Return a queryset of parts which are allowed to be added to this BOM.
+ """
+
+ return self.part.get_allowed_bom_items()
+
def get(self, request, *args, **kwargs):
""" Perform the initial 'GET' request.
@@ -915,6 +923,7 @@ class BomUpload(FormView):
self.request = request
self.part = get_object_or_404(Part, pk=self.kwargs['pk'])
+ self.allowed_parts = self.getAllowedParts()
self.form = self.get_form(self.get_form_class())
# Did the user POST a file named bom_file?