Пытаюсь разобраться с работой планировщика django-rq-scheduler . Имеется небольшая модель:
class Currency(models.Model):
name = models.CharField('Название валюты', max_length=20)
price_usd = models.DecimalField(
'Курс в долларах', max_digits=20, decimal_places=10, blank=True, null=True)
last_updated = models.IntegerField('Последние обновление')
def __str__(self):
return '%s %s %s' % (self.name, self.price_usd, self.last_updated)
- Вот варианты кода,которыми пытаюсь записать данные:
1)
import requests from models import Currency from django_rq import job @job def save_exchange_rates(): url = 'https://api.coinmarketcap.com/v1/ticker/' repositories = requests.get(url).json() for exchange in repositories: cur = Currency() cur.name = exchange['name'] cur.price_usd = exchange['price_usd'] cur.last_updated = exchange['last_updated'] cur.save() if __name__ == '__main__': save_exchange_rates()
2)
При попытке запустить их вручную, возникает ошибка:import requests from models import Currency from django_rq import job @job def save_exchange_rates(): url = 'https://api.coinmarketcap.com/v1/ticker/' repositories = requests.get(url).json() for exchange in repositories: Currency.objects.create(name=exchange['name'], price_usd=exchange['price_usd'], last_updated=exchange['last_updated'],) if __name__ == '__main__': save_exchange_rates()
Подскажите, о Гуру, в чем может быть причина?Traceback (most recent call last): File "task.py", line 2, in <module> from models import Currency File "/home/pavel/django/market_coins/market_capitalizations/exchange_rates/models.py", line 10, in <module> class Currency(models.Model): File "/home/pavel/django/market_coins/env/lib/python3.5/site-packages/django/db/models/base.py", line 100, in __new__ app_config = apps.get_containing_app_config(module) File "/home/pavel/django/market_coins/env/lib/python3.5/site-packages/django/apps/registry.py", line 244, in get_containing_app_config self.check_apps_ready() File "/home/pavel/django/market_coins/env/lib/python3.5/site-packages/django/apps/registry.py", line 127, in check_apps_ready raise AppRegistryNotReady("Apps aren't loaded yet.") django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
- И еще вопрос про Repeatable Jobs в админке. Можно ли там передать параметр к выполняемой функции в поле Callable: .Для примера, хочу вызывать функцию с помощью django-rq-scheduler для каждой валюты с разным расписанием:
import requests from models import Currency from django_rq import job @job def save_exchange_rates(coin): url = 'https://api.coinmarketcap.com/v1/ticker/{}/'.format(coin) exchange = requests.get(url).json() Currency.objects.create(name=exchange['name'], price_usd=exchange['price_usd'], last_updated=exchange['last_updated'],) if __name__ == '__main__': save_exchange_rates()