Ich habe eine Django App, die Sellerie verwendet, um einige Aufgaben zu entladen. Hauptsächlich wird die Berechnung einiger Felder in einer Datenbanktabelle verschoben.Resolving kreisförmigen Einfuhren in Sellerie und Django
Also, ich habe eine 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()
Und 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)
Jetzt offensichtlich, dies wird nicht wegen eines Kreis Import arbeiten (models
Importe tasks
und tasks
Importe models
).
Ich habe dies im Moment gelöst, indem ich my_task.delay()
von views.py
aufrufen, aber es scheint sinnvoll zu sein, die Modelllogik innerhalb der Modellklasse zu behalten. Gibt es einen besseren Weg, dies zu tun?
Erstellen Sie einen benutzerdefinierten ModelManager und fügen Sie eine separate Datei ein. –