2011-05-30 12 views
12

Estoy anulando el método save() de un modelo para llamar a una tarea asíncrona con Aplery. Esa tarea también guarda el modelo, por lo que termino con una situación recursiva donde se llama repetidamente a la tarea de Apio. Aquí está el código:Evite el uso recursivo save() cuando use el apio para actualizar los campos del modelo Django

Modelo de guardar el método:

def save(self, *args, **kwargs): 
    super(Route, self).save(*args, **kwargs) 
    from .tasks import get_elevation_data 
    get_elevation_data.delay(self) 

tarea get_elevation_data:

from celery.decorators import task 

@task() 
def get_elevation_data(route): 
    ... 
    route.elevation_data = results 
    route.save() 

Como puedo evitar esto recursividad?

Respuesta

14

Añadir un argumento de palabra clave que le dice a salvar no a recursiva:

def save(self, elevation_data=True, *args, **kwargs): 
    super(Route, self).save(*args, **kwargs) 
    if elevation_data: 
    from .tasks import get_elevation_data 
    get_elevation_data.delay(self) 

Y luego:

from celery.decorators import task 

@task() 
def get_elevation_data(route): 
    ... 
    route.elevation_data = results 
    route.save(elevation_data=False) 
Cuestiones relacionadas