Как запустить скрипт на Python в Django? - PullRequest
1 голос
/ 08 октября 2019

Я новичок в Django и пытаюсь импортировать одну из моих моделей в скрипт, как мы делаем это в views.py. Я получаю сообщение об ошибке:

Traceback (most recent call last):

  File "CallCenter\make_call.py", line 3, in <module>

    from .models import Campaign


ModuleNotFoundError: No module named '__main__.models'; '__main__' is not a package

Моя структура файлов выглядит следующим образом:

MyApp \ CallCenter \

CallCenter содержит __init__.py, make_call.py, models.py, views.py и MyApp имеет manage.py

from twilio.rest import Client
from twilio.twiml.voice_response import VoiceResponse, Say, Dial, Number, VoiceResponse
from .models import Campaign


def create_xml():

    # Creates XML
    response = VoiceResponse()
    campaign = Campaign.objects.get(pk=1)
    response.say(campaign.campaign_text)

    return response


xml = create_xml()
print(xml)

1 Ответ

2 голосов
/ 08 октября 2019

В общем, лучше реорганизовать «ad-hoc» сценарии - все, что вы можете запустить вручную, например, из командной строки, - в команды управления .

Таким образом, среда выполнения Djangoнастроен правильно, как только в ваш код поступят какие-то вещи, и вы также получаете бесплатный анализ командной строки.

Ваш make_call.py может выглядеть примерно так:

CallCenter / management / commands /make_call.py

from twilio.rest import Client
from twilio.twiml.voice_response import VoiceResponse, Say, Dial, Number, VoiceResponse
from CallCenter.models import Campaign

from django.core.management import BaseCommand


def create_xml(campaign):
    # Creates XML
    response = VoiceResponse()
    response.say(campaign.campaign_text)
    return response


class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument("--campaign-id", required=True, type=int)

    def handle(self, campaign_id, **options):
        campaign = Campaign.objects.get(pk=campaign_id)
        xml = create_xml(campaign)
        print(xml)

, и он будет вызываться с помощью

$ python manage.py make_call --campaign-id=1

, где бы ни находился ваш manage.py.

(не забудьте иметь файл __init__.pyв папках management/ и management/commands/.)

...