Are you using a mysql database? That may be the source of the trouble. IIRC, some versions of MySQL, depending on the inner database, don't support transactions.
-Zeroth On Nov 29, 6:56 pm, "I.A" <[EMAIL PROTECTED]> wrote: > hi guys, > > i'm wondering how transaction really works with django models. i've > gone through the documentation > inhttp://docs.djangoproject.com/en/dev/topics/db/transactions/?from=old... > but it doesn't work for me. > > this is a sample of my code. not that this code is being used in the > backend and does not have any relationship to any views. > > model relationships > ------------------------------- > > class A(models.Model): > login = models.EmailField(unique=True) > > class B(models.Model): > aid = models.OneToOneField(A, primary_key=True) > colb = models.CharField(max_length=255) > > class C(models.Model): > aid = models.OneToOneField(A, primary_key=True) > colc = models.CharField(max_length=255) > > code > ---------------- > > class AClass(object): > def register(cls, **kwargs): > try: > a_db = A(login=kwargs['login']) > a_db.save() > function_test_01() > return a_db > except: > raise MyException > > class BClass(AClass): > def register(cls, **kwargs): > try: > a_db = super(BClass, cls).register(**kwargs) > b_db = B(aid=a_db, colb=kwargs['colb']) > b_db.save() > function_test_02() > return a_db > exception: > raise MyException > > class CClass(BClass): > > [EMAIL PROTECTED] > def register(cls, **kwargs): > try: > a_db = super(CClass, cls).register(**kwargs) > c_db = C(aid=a_db, colc=kwargs['colc']) > c_db.save() > transaction.commit() > except: > transaction.rollback() > > if __name__ == '__main__': > # Test if register works > CClass.register( colc='abc', colb='def') > > If I run the above script no errors prop up, all three tables will be > populated with the data and everything is ok. On the other hand, if > something goes wrong in the middle somehwhere, my transaction doesn't > work the way i wanted it to. > > For example, when running the test, function_test_02() raises an > exception and this is caught by CClass.register()'s except and > transaction.rollback() is supposed to be called, but the data in > AClass register() was entered into the db. As a result, I have a > situation where the only data inserted into the db is A while B and C > was not. > > Can anyone point out where I'm doing it wrong? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---

