2016-05-24 4 views
0

Ich versuche, meinen Code zu aktualisieren, der commit_manually zu atomic verwendet, um nach Django 1.7 dann 1,8 zu gehen, aber ich habe Probleme, rollback während in einem atomaren Block nicht zu können. Das Problem stammt von einem Flag, das wir zu Importroutinen, dry_run, hinzugefügt haben. In den früheren Django Versionen @commit_manually uns folgendes zu tun erlaubt:Ausgabe eines Rollback() in einem atomaren Block

if self.dry_run: 
    transaction.rollback() 
else: 
    transaction.commit() 

Wenn ich ein Rollback in einem atomic Block vorzuformen versuchen, wirft er einen Fehler:

TransactionManagementError : "This is forbidden when an 'atomic' block is active."

Um dies ich zu arbeiten versuchte Verwendung von set_autocommit

Beispiel zu machen:

def do_some_import(self) 
    transaction.set_autocommit(False) 

    #import routine 

    if self.dry_run: 
      transaction.rollback() 
      transaction.set_autocommit(True) 
     else: 
      transaction.commit() 
      transaction.set_autocommit(True) 

Aber das fühlt sich falsch an, irgendwelche Vorschläge oder Einsichten?

Antwort

0

Haben Sie versucht set_rollback()? Ich denke, das wird dein Problem lösen.

@transaction.atomic 
def do_some_import(self): 
    #import routine 

    if self.dry_run: 
     transaction.set_rollback(True) 
+0

Ich lese diesen Abschnitt der Dokumentation vollständig durch, den ich testen werde, und ich melde mich bei Ihnen! –

Verwandte Themen