The commit event handler is to commit a transaction, the on_commit event is for running a function when the commit is done. That is my intention, but maybe there is something I don't see.
I want to execute a celery task, foo.delay(...), when the save of Model is finished. That way if I modify Model inside the task, it will have the changes applied. If that is not the case, there are sometimes that I could get the Model instance before the save finished, and it would be the old instance. El lunes, 24 de abril de 2017, 15:50:43 (UTC+2), m712 - Developer escribió: > > I'm not too familiar with Celery, but I think that for loop continuously > keeps changing transaction's commit event handler. Maybe you are looking > for something like transaction.commit instead of on_commit? > On Apr 24, 2017 2:37 PM, Emilio Jimenez Canalejo <[email protected] > <javascript:>> wrote: > > Hi, I've been looking for some time around the internet a problem I have, > maybe I'm just dull from all the searching and the answer is pretty > obvious, but I can't find it. > > For example, I have code like this: > @app.task > def foo(idx): > print("This is iteration {}".format(idx)) > > def save_model(self, request, obj, form, change): > data = request.POST > result = super(Model, self).save_model(request, obj, form, change) > > for pk in data['_models_changed']: > transaction.on_commit(lambda: foo(pk)) > > To my astonishment, I thought I would get: > "This is iteration 1" > "This is iteration 2" > "This is iteration 3" > "This is iteration 4" > > But I got: > "This is iteration 4" > "This is iteration 4" > "This is iteration 4" > "This is iteration 4" > > I'm using python 2.7, Django 1.10.5 and Celery 4.0.2. > > 'models_changed' is a field in the post added by a custom clean method. > > Anyone knows a way to do this? > > Thanks for all! > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To post to this group, send email to [email protected] > <javascript:>. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/91e87fb4-69e2-4b4e-bd6b-704eb7567026%40googlegroups.com > > <https://groups.google.com/d/msgid/django-users/91e87fb4-69e2-4b4e-bd6b-704eb7567026%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/d85f5c78-55fe-443c-b247-ce6083d6f8e4%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

