X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/133a8f939cdfa69dd6a7caeafed158aa38d20092..c3d66e36e08b517f61b7f720e4a3b5a75f202cb6:/forum/models/node.py diff --git a/forum/models/node.py b/forum/models/node.py index 530981b..552944e 100644 --- a/forum/models/node.py +++ b/forum/models/node.py @@ -83,6 +83,7 @@ class Node(BaseModel, NodeContent, DeletableContent): node_type = models.CharField(max_length=16, default='node') parent = models.ForeignKey('Node', related_name='children', null=True) + abs_parent = models.ForeignKey('Node', related_name='all_children', null=True) added_at = models.DateTimeField(default=datetime.datetime.now) @@ -104,6 +105,13 @@ class Node(BaseModel, NodeContent, DeletableContent): def leaf(self): return NodeMetaClass.types[self.node_type].objects.get(id=self.id) + @property + def absolute_parent(self): + if not self.abs_parent_id: + return self.leaf + + return self.abs_parent.leaf + @property def summary(self): return strip_tags(self.html)[:300] @@ -179,6 +187,9 @@ class Node(BaseModel, NodeContent, DeletableContent): def save(self, *args, **kwargs): if not self.id: self.node_type = self.__class__.__name__.lower() + + if self.parent_id and not self.abs_parent_id: + self.abs_parent = self.parent.absolute_parent tags = self.get_tag_list_if_changed() super(Node, self).save(*args, **kwargs)