\r
\r
node_create = django.dispatch.Signal(providing_args=['instance'])\r
+node_edit = django.dispatch.Signal(providing_args=['instance'])\r
\r
class Node(BaseModel, NodeContent, DeletableContent):\r
__metaclass__ = NodeMetaClass\r
\r
node_type = models.CharField(max_length=16, default='node')\r
parent = models.ForeignKey('Node', related_name='children', null=True)\r
+ abs_parent = models.ForeignKey('Node', related_name='all_children', null=True)\r
\r
added_at = models.DateTimeField(default=datetime.datetime.now)\r
\r
def leaf(self):\r
return NodeMetaClass.types[self.node_type].objects.get(id=self.id)\r
\r
+ @property \r
+ def absolute_parent(self):\r
+ if not self.abs_parent_id:\r
+ return self.leaf\r
+\r
+ return self.abs_parent.leaf\r
+\r
@property\r
def summary(self):\r
return strip_tags(self.html)[:300]\r
self.body = revision.body\r
\r
old_revision = self.active_revision\r
-\r
self.active_revision = revision\r
- self.save()\r
\r
if not old_revision:\r
+ signal = node_create\r
+ else:\r
self.last_edited_at = datetime.datetime.now()\r
self.last_edited_by = user\r
- node_create.send(sender=self.__class__, instance=self)\r
+ signal = node_edit\r
+\r
+ self.save()\r
+ signal.send(sender=self.__class__, instance=self)\r
\r
def get_tag_list_if_changed(self):\r
dirty = self.get_dirty_fields()\r
def save(self, *args, **kwargs):\r
if not self.id:\r
self.node_type = self.__class__.__name__.lower()\r
+\r
+ if self.parent_id and not self.abs_parent_id:\r
+ self.abs_parent = self.parent.absolute_parent\r
+\r
+ self.__dict__['score'] = self.__dict__['vote_up_count'] - self.__dict__['vote_down_count']\r
\r
tags = self.get_tag_list_if_changed()\r
super(Node, self).save(*args, **kwargs)\r