芹菜使用自己的模型而不是Taskresults

时间:2019-04-08 09:55:52

标签: django django-models celery

我在Django上使用Celery。我有从Web API获取数据的定期任务。然后将结果保存到taskresults模型中的数据库中。

taskresults模型只是将api中的json打包成一个字段,而这不是我所需要的。我可以在任务结果模型中添加字段吗?

我在使用替代方法时遇到了问题,即我正在与模型不同的应用程序中创建模型对象-我一直在django中遇到这样的问题:

raise AppRegistryNotReady("Apps aren't loaded yet.")

我有一个装有模型的核心应用程序,还有一个天气应用程序,这是我的主要应用程序,带有settings.py文件。

我的celery.py在“天气”中,就像这样:

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(...)的视图中调用create函数,但似乎无法正确导入核心模块。

0 个答案:

没有答案