Как мне запустить скрипт внутри django? - PullRequest
0 голосов
/ 23 апреля 2020

C:\Users\Qasim\Desktop\translator>python manage.py runscript text
No (valid) module for script 'text' found
Try running with a higher verbosity level like: -v2 or -v3

C:\Users\Qasim\Desktop\translator>python manage.py runscript text -v2
Check for django.contrib.admin.scripts.text
Check for django.contrib.auth.scripts.text
Check for django.contrib.contenttypes.scripts.text
Check for django.contrib.sessions.scripts.text
Check for django.contrib.messages.scripts.text
Check for django.contrib.staticfiles.scripts.text
Check for news.scripts.text
Check for rest_framework.scripts.text
Check for django_extensions.scripts.text
Check for scripts.text
No (valid) module for script 'text' found
#text.py
from news.models import News

def run():
    #all news
    deleteAll = News.objects.all()

    #delete all news
    deleteAll.delete()

1 Ответ

0 голосов
/ 23 апреля 2020

Для чего-то подобного я бы порекомендовал создать собственную команду управления. Это позволит вам запустить код, используя manage.py <command name>, как вы пытаетесь это сделать.

Документы находятся на https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/

Таким образом, вы начнете с добавления Папка management в каталоге вашего приложения, затем добавьте папку commands в папку management.

Внутри папки команд создайте файл для вашей команды - что-то вроде delete_all_news.py. Вы запустите команду, используя имя файла (без расширения .py), поэтому если вы назовете файл delete_my_stuff.py, вы запустите его с manage.py delete_my_stuff. Не начинайте имя файла с подчеркивания, иначе вы не сможете запустить его из командной строки (вы будете использовать эти файлы для поддержки файлов, которые вы не хотите использовать в качестве реальных команд - в вашем случае это не требуется).

Содержимое этого файла может быть примерно таким, как показано ниже (очевидно, в работе вы хотели бы обработать исключение и какое-то уведомление / запись в журнал, что команда выполнена успешно или не выполнена)

news /management/commands/delete_all_news.py

from django.core.management.base import BaseCommand, CommandError
from news.models import News


class Command(BaseCommand):
    help = 'Delete all news items from database'

    def handle(self, *args, **options):
        News.objects.all().delete()

Затем запустите из командной строки команду manage.py delete_all_news

Также обратите внимание, что вы можете связать вызов delete() с objects фильтр - не нужно читать objects.all() в переменную, а затем выполнять удаление, вы можете сделать все это одним оператором, если хотите.

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