Как вызвать django пользовательскую команду из кода? call_command () не работает - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь создать бота для телеграмм, который загружает изображения на сайт django. Вы отправляете боту изображение -> бот загружает изображение на сервер и добавляет информацию к модели -> изображение появляется на веб-странице

Я застрял с "бот добавляет информацию в модель" часть. По сути, я хочу использовать команду django .core.management.call_command для вызова пользовательской команды из кода, который добавляет информацию.

Вот структура

website/
    bot.py
    manage.py
    myapp/
        __init__.py
        management/
            __init__.py
            commands/
                __init__.py
                myapp_task.py
        views.py

Вот моя настраиваемая команда

# myapp_task.py
from django.core.management.base import BaseCommand
from picfeed.models import Captions

class Command(BaseCommand):
    help = 'Adds captions to the model'

    def add_arguments(self, parser):
        parser.add_argument('cap_text', type=str)

    def handle(self, *args, **options):
        cap_text = options['cap_text']
        caption = Captions(cap_text = cap_text)
        caption.save()
        self.stdout.write(self.style.SUCCESS('Successfully added caption "%s"' % cap_text))

Когда я использую Терминал и python manage.py myapp_task 'some string to add to the model' работает отлично.

Однако, когда я вызываю myapp_task из кода, он не работает:

#bot.py
from django.core.management import call_command

call_command('myapp_task',cap_text = 'Hello there!' )

Ошибка:

 \website>python bot.py
Traceback (most recent call last):
  File "C:\Users\EgOl7001\AppData\Local\Continuum\anaconda3\lib\site-packages\django\core\management\__init__.py", line 103, in call_command
    app_name = get_commands()[command_name]
KeyError: 'myapp_task'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "bot.py", line 3, in <module>
    call_command('myapp_task',cap_text = 'Hello there!' )
  File "C:\Users\EgOl7001\AppData\Local\Continuum\anaconda3\lib\site-packages\django\core\management\__init__.py", line 105, in call_command
    raise CommandError("Unknown command: %r" % command_name)
django.core.management.base.CommandError: Unknown command: 'myapp_task'

Буду признателен за вашу помощь! :)

1 Ответ

1 голос
/ 27 мая 2020

Вы пытаетесь использовать весь набор инструментов django без настройки конфигурации.

Вы должны попытаться добавить в свой bot.py что-то подобное перед использованием django:

import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings")
django.setup()

https://docs.djangoproject.com/en/3.0/topics/settings/#calling - django -setup-is-required-for-standalone- django -usage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...