Nel mio models.py:Django - L'esecuzione di un compito attraverso sedano da un modello
from django.db import models
from core import tasks
class Image(models.Model):
image = models.ImageField(upload_to='images/orig')
thumbnail = models.ImageField(upload_to='images/thumbnails', editable=False)
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
tasks.create_thumbnail.delay(self.id)
Nel mio tasks.py:
from celery.decorators import task
from core.models import Image
@task()
def create_thumbnail(image_id):
ImageObj = Image.objects.get(id=image_id)
# other stuff here
Questo sta tornando il seguente:
- Tipo eccezione: ImportErrore
- Eccezione Valore: non può importare compiti nome
L'errore scompare se io commento from core.models import Image
in tasks.py
, tuttavia questo ovviamente causerà un problema dato Image
non ha senso qui. Ho provato a importarlo all'interno di create_thumbnail
tuttavia non lo riconoscerà ancora Image
.
Ho letto da qualche parte che in genere l'oggetto stesso può essere passato come argomento a un'attività e che risolverebbe il mio problema. Tuttavia, una volta un amico mi ha detto che è considerata una buona pratica inviare il minor numero di dati possibile in un messaggio RabbitMQ, così per realizzare che sto provando a passare solo l'ID dell'immagine e poi a recuperarla nuovamente nell'attività.
1) È quello che sto cercando di fare considerato una buona pratica? Se sì, come posso risolverlo?
2) Ho notato in tutti gli esempi che ho trovato in tutto il Web, che eseguono l'attività da una vista e mai da un modello. Sto provando a creare una miniatura ogni volta che viene caricata una nuova immagine, non voglio chiamare create_thumbnail in ogni forma/vista che ho. Qualche idea al riguardo? Esecuzione di un'attività da un modello non consigliato o da una pratica comune?
Ho davvero apprezzato il paragrafo" Per eliminare le importazioni circolari, dovresti pensare a quale modo le importazioni dovrebbero accadere ... ". Grazie. – pawelmech