Mam aplikację Django, która używa Selera do odciążenia niektórych zadań. Głównie, odrzuca obliczenia niektórych pól w tabeli bazy danych.Rozwiązywanie okrągłych importów w selerach i django
Tak, mam 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()
aw 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)
Teraz oczywiście, to nie będzie działać z powodu okrągłego importu (import tasks
i models
tasks
import models
).
Rozwiązałem to na chwilę, dzwoniąc pod numer my_task.delay()
z views.py
, ale wydaje się, że logika modelu ma sens w klasie modelu. Czy jest lepszy sposób na zrobienie tego?
Utwórz niestandardowy menedżer modeli ModelManager i umieść w osobnym pliku. –