Я использую Сельдерей с Джанго.У меня есть периодическая задача, которая получает данные из веб-API.Затем он сохраняет результаты в базу данных в модели taskresults.
Модель taskresults просто объединяет JSON из API в одно поле, и это не то, что мне нужно.Могу ли я добавить поля в модель taskresult?
У меня проблемы с альтернативным подходом, когда я создаю объект модели в приложении, отличном от модели - я продолжаю получать проблемы с неготовностью приложения в djangoнапример:
raise AppRegistryNotReady("Apps aren't loaded yet.")
У меня есть основное приложение с моими моделями и приложение Weather, которое является моим основным приложением с файлом settings.py.
Мой celery.py находится в Weatherи вот так:
from __future__ import absolute_import, unicode_literals
import requests
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Weather.settings')
from core import views
from Weather.settings import OPEN_WEATHER_API_URL, OPEN_WEATHER_API_KEY
# set the default Django settings module for the 'celery' program.
app = Celery('Weather')
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Gets London weather every hour.
sender.add_periodic_task(10.0, get_weather_task.s(), name='london_weather')
sender.add_periodic_task(3600.0, get_weather_task.s(), name='london_weather')
@app.task()
def get_weather_task():
querystring = {"q": "London,UK"}
headers = {
'x-api-key': OPEN_WEATHER_API_KEY,
}
res = requests.get(OPEN_WEATHER_API_URL, headers=headers, params=querystring).json()
views.create(res)
return res
Как вы можете видеть в этой версии, я пытаюсь вызвать функцию создания в представлениях, которая выполняет MyModel.object.create (...), но я не могу показатьсяправильно импортировать основной модуль.