Django 1.5 दिनों, अगर मैं मैन्युअल रूप से (लेन-देन के भीतर या लेन-देन) लेनदेन के प्रबंधन करना चाहता था में, मैं कुछ इस तरह करना होगा:Django 1.6 - "बाहरीतम परमाणु 'ब्लॉक autocommit बंद होने पर savepoint = गलत का उपयोग नहीं कर सकता है।"
@transaction.commit_manually
def my_method():
master_sid = transaction.savepoint()
for item in things_to_process:
inner_sid = transaction.savepoint()
# Make changes, save models, etc.
...
if I_want_to_keep_this_iterations_changes:
transaction.savepoint_commit(inner_sid)
else:
transaction.savepoint_rollback(inner_sid)
if I_want_to_keep_all_un_rolled_back_changes_from_loop:
transaction.savepoint_commit(master_sid)
else:
transaction.savepoint_rollback(master_sid)
अगर मैं सही ढंग से समझने the Django docs रहा हूँ, जब 1.6 Django के उन्नयन Django 1.6+ में
def my_method():
transaction.set_autocommit(False)
try:
# Same code as above
finally:
transaction.set_autocommit(True)
हालांकि,, यदि आप model.save() जबकि autocommit गलत है कहते हैं, Django निम्न त्रुटि बढ़ा देंगे:: +, मैं ऊपर कुछ करने के लिए इस तरह बदलना चाहिए
TransactionManagementError: The outermost 'atomic' block cannot use savepoint = False when autocommit is off.
तो, ऑटोोकॉमिट गलत होने पर मैं मॉडल को कैसे सहेजूं? मेरे पुराने, Django 1.5 कोड के लिए आधुनिक प्रतिस्थापन क्या है?
विधि पर @ banking.atomic का उपयोग करें – GrvTyagi