У меня есть приложение Django, которое использует Celery для разгрузки некоторых задач. В основном, он отклоняет вычисление некоторых полей в таблице базы данных.Решающий круговой импорт в сельдерей и django
Итак, у меня есть 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()
И в 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)
Теперь очевидно, что это не будет работать из-за круговой импорта (models
импорт tasks
и tasks
импорт models
).
Я решил это на данный момент, позвонив my_task.delay()
от views.py
, но, похоже, имеет смысл сохранить модельную логику в классе модели. Есть ли лучший способ сделать это?
Создайте пользовательский ModelManager и поместите его в отдельный файл. –