2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 12:06:44 +00:00

Added function to get all parents for a tree item

This commit is contained in:
Oliver Walters 2017-03-29 20:23:21 +11:00
parent 68ae1110ad
commit 2b998a1931

View File

@ -42,7 +42,23 @@ class InvenTreeTree(models.Model):
parent = models.ForeignKey('self', parent = models.ForeignKey('self',
on_delete=models.CASCADE, on_delete=models.CASCADE,
blank=True, blank=True,
null=True) null=True,
related_name='children')
def getUniqueParents(self, unique=None):
""" Return a flat set of all parent items that exist above this node.
If any parents are repeated (which would be very bad!), the process is halted
"""
if unique is None:
unique = set()
else:
unique.add(self.id)
if self.parent and self.parent.id not in unique:
self.parent.getUniqueParents(unique)
return unique
def getUniqueChildren(self, unique=None): def getUniqueChildren(self, unique=None):
""" Return a flat set of all child items that exist under this node. """ Return a flat set of all child items that exist under this node.
@ -61,9 +77,6 @@ class InvenTreeTree(models.Model):
contents = ContentType.objects.get_for_model(type(self)) contents = ContentType.objects.get_for_model(type(self))
children = contents.get_all_objects_for_this_type(parent=self.id) children = contents.get_all_objects_for_this_type(parent=self.id)
for child in children:
child.getUniqueChildren(unique)
return unique return unique
def getAcceptableParents(self): def getAcceptableParents(self):