تخطي للذهاب إلى المحتوى
القائمة
لقد تم الإبلاغ عن هذا السؤال
4 الردود
32033 أدوات العرض

I have a button that when clicked imports records from an external source. It then loops through the records and uses .create to create the new records on the model in the database from the imported records. However it doesn't seem to commit them until its completed the loop of all imported records. Is there anyway to force the commit after each iteration?

object.create( template )
الصورة الرمزية
إهمال
الكاتب أفضل إجابة

While Sah's answer appears like it should work I did some more research and found a much simpler answer for my scenario.

All I had to do was use the current environment variable and cursor and run commit(). See below.

self.env.cr.commit()
الصورة الرمزية
إهمال
أفضل إجابة
  • self.env.cr.commit() commits the transaction's buffered write operations.
  • self.env.cr.savepoint() sets a transaction savepoint to rollback to.
  • self.env.cr.rollback() cancels the transaction's write operations since the last commit, or all if no commit was done.


الصورة الرمزية
إهمال
أفضل إجابة

commit the code by 

self.env.cr.commit()

If you have too many records in for loop then commit every 100 or 1000th record

count += 1
if count == 100:
_logger.info('100 records created ')
self.env.cr.commit()
count = 0

الصورة الرمزية
إهمال
أفضل إجابة

add this to py file
#top of the file
from odoo import api, fields, models, _, modules
from odoo.http import request
#before for loop
r = modules.registry.RegistryManager.get(dbname)
cr = r.cursor()
#inside loop
cr.commit()
#make sure you close cr at the end of the function scope
cr.close()

Let me know if there is any error with your log file

الصورة الرمزية
إهمال
المنشورات ذات الصلة الردود أدوات العرض النشاط
0
سبتمبر 19
98
1
يوليو 17
4353
4
أغسطس 16
8551
1
مايو 16
5172
1
مارس 16
5211