Сельдерей использует собственную модель вместо Taskresults - PullRequest
0 голосов
/ 08 апреля 2019

Я использую Сельдерей с Джанго.У меня есть периодическая задача, которая получает данные из веб-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 (...), но я не могу показатьсяправильно импортировать основной модуль.

...