Пользовательская команда django не найдена - PullRequest
32 голосов
/ 03 февраля 2010

Возникли проблемы с работой пользовательских команд django.

Из django Документация , поместили

application/
    manage.py
    blog/
        __init__.py
        models.py
        management/
            __init__.py
            commands/
                __init__.py
                myapp_task.py
        views.py

Контент myapp_task.py равен

from django.core.management.base import NoArgsCommand

class Command(NoArgsCommand):
    def handle_noargs(self, **options):
        print 'Doing task...'
        # invoke the functions you need to run on your project here
        print 'Done'

при запуске

python manage.py myapp_task

получая ошибку

Unknown command: 'myapp_task'

Ответы [ 6 ]

49 голосов
/ 03 февраля 2010

Структура каталогов в вашем ответе немного неоднозначна; при размещении файлов следующим образом django сможет найти вашу команду:

project/ # in your question this would be 'application'
    manage.py
    blog/
        __init__.py
        models.py
        management/
            __init__.py
            commands/
                __init__.py
                myapp_task.py
        views.py

Кроме того, вам нужно включить ваше приложение в вашем settings.py:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'blog', # <= your app here ...
)
3 голосов
/ 07 декабря 2012

У меня была такая же проблема.Причина была в том, что корень проекта не был в моем $ PYTHONPATH.Решение в этом случае - набрать (на машине с Linux) что-то вроде

PYTHONPATH=./project python manage.py myapp_task
0 голосов
/ 23 мая 2018

Привет, у меня тоже была эта проблема, и я обнаружил, что перепутал идентификатор аргумента с именем файла

, поэтому файл - это имя команды, которую вы хотите, т.е..py to updater.py

class Command(BaseCommand):
    help = 'Update Files Since \'X\' Days Ago'   

    def add_arguments(self, parser):
        parser.add_argument('updatefiles', nargs='+', type=int)

    def handle(self, *args, **options):

        days_ago = int(options['updatefiles'][0])
        days_ago = (days_ago * -1) if days_ago < 0 else days_ago

        self.stdout.write('Adding files since %s days ago' % days_ago)
        add_files_function(days_ago)

, тогда для запуска я бы использовал

python manage.py updater
0 голосов
/ 17 мая 2014

Это потому, что init .pyc не создается автоматически в папках "management" и "commands". Скопируйте your_app/__init__.py и your_app/__init__.pyc и вставьте его в папку управления / и командам /.

0 голосов
/ 03 ноября 2013

Если проект скомпилирован байтово, django.core.management.find_commands () будет искать только файлы .py. Если ваши пользовательские команды находятся в файлах .pyc, вам необходимо установить патч django / core / management / commands / __ init__.py с патчем https://code.djangoproject.com/ticket/19085

0 голосов
/ 03 февраля 2010

Я думаю, что команды / должны находиться внутри каталога управления /.

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