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.

Reply via email to