Ho un'app Django che usa Celery per scaricare alcune attività. Principalmente, rimuove il calcolo di alcuni campi in una tabella di database.Risoluzione delle importazioni circolari in sedano e django
Così, ho un tasks.py:
from models import MyModel
from celery import shared_task
@shared_task
def my_task(id):
qs = MyModel.objects.filter(some_field=id)
for record in qs:
my_value = #do some computations
record.my_field = my_value
record.save()
E in models.py
from django.db import models
from tasks import my_task
class MyModel(models.Model):
field1 = models.IntegerField()
#more fields
my_field = models.FloatField(null=True)
@staticmethod
def load_from_file(file):
#parse file, set fields from file
my_task.delay(id)
Ora, ovviamente, questo non lavorare a causa di un'importazione circolare (models
importazioni tasks
e tasks
importazioni models
).
Ho risolto questo momento chiamando my_task.delay()
da views.py
, ma sembra avere senso mantenere la logica del modello all'interno della classe del modello. C'è un modo migliore per farlo?
Creare un ModelManager personalizzato e inserire un file separato. –