Hi,

I got a too difficult problem for me :

Here's is my model Poll :

class Poll(meta.Model):
    question = meta.CharField(maxlength=200)
    pub_date = meta.DateTimeField('date published')

    class META:
        admin = meta.Admin()

    def __repr__(self):
        return self.question

    def _post_save(self):
        from django.models.treemanager import trees
        a = trees.Tree(parent_id = 1,lhs = 0, rhs = 0, name =
self.question, description = 'Description', table_name = 'polls_polls',
table_id = self.id)
        a.save()

And my model Tree :

class Tree(meta.Model):
    parent = meta.ForeignKey("self")
    lhs = meta.IntegerField(null=False, default=0)
    rhs = meta.IntegerField(null=False, default=0)
    name = meta.CharField(maxlength=255, null=False, default='')
    description = meta.CharField(maxlength=255, null=False, default='')
    table_name = meta.CharField(maxlength=255, null=False, default='')
    table_id = meta.IntegerField(null=False, default=0)

    class META:
        admin = meta.Admin()

    def __repr__(self):
        return self.name

    def _pre_save(self):
        if self.id == None :
            from django.models.treemanager import trees
            from django.core.db import db
            print "Je suis ici"
            myParent = trees.get_object(pk = self.parent_id)
            updateLeftQuery = "UPDATE treemanager_trees SET lhs = lhs +
%s WHERE lhs >= %s" %(2, myParent.rhs)
            updateRightQuery = "UPDATE treemanager_trees SET rhs = rhs
+ %s WHERE rhs >= %s" %(2, myParent.rhs)
            cursor = db.cursor()
            cursor.execute(updateLeftQuery)
            cursor.execute(updateRightQuery)
            self.lhs = myParent.rhs
            self.rhs = myParent.rhs + 1

And when I save a new Poll (from command line interface or web admin
interface), I got this appening :

1 - New Poll is saved
2 - New Poll._post_save() is called
3 - New Poll creates a New Tree
4 - New Tree is saved but New Tree._pre_save() is NEVER called.

Did I missed something ???

Regards,

Laurent.

Reply via email to