Аргументы команды управления Django - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь понять, как работают команды управления Django.

Когда нет никаких аргументов или сам по себе.моя команда работает нормально.Когда я добавляю аргументы ко второй функции 'def add_arguments', кажется, что один аргумент работает, но другой не регистрируется.

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

from backend.tasks import MBCommand
import sys

class Command(MBCommand):
    help = 'Refreshes MB data'

    def add_arguments(self , parser):
        parser.add_argument('event_id' , nargs='+' , type=int, 
        help='evid')
        parser.add_argument('market_id', nargs='+', type=int, 
        help='marid')

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

       self.mb_get_events()

       event_ids =  kwargs['event_id']
       market_ids = kwargs['market_id']

        for event_id in event_ids:
            for market_id in market_ids:


            self.mb_get_runners(event_id,market_id)
            sys.exit()

Мои две функции,

from django.core.management.base import BaseCommand, CommandError
class MBCommand(BaseCommand):

    def mb_get_events(self):
        do something


   def mb_get_runners(self, event_id, market_id):
        do something

Что мне здесь не хватает?

как я запускаю команду (update_mb - это имя файла команды)

python manage.py update_mb  event_id market_id

ошибка.

usage: manage.py update_mb [-h] [--version] [-v {0,1,2,3}]
                     [--settings SETTINGS] [--pythonpath 
     PYTHONPATH]
                     [--traceback] [--no-color]
                     event_id [event_id ...] market_id [market_id 
  ...]
 manage.py update_mb: error: argument event_id: invalid int 
 value: 
'event_id'
(butterbotenv) macs-MBP:butterbot mac$ 

1 Ответ

0 голосов
/ 08 сентября 2018

Как я уже сказал в комментариях к вопросу:

Команда ожидает один (или несколько) аргументов типа int;но, как говорится в ошибке, он не может преобразовать полученный аргумент в int.

Попробовать передать числа;вместо

python manage.py update_mb event_id market_id

попробуйте использовать это (или что-то подобное)

python manage.py update_mb 2 3 4

Но я замечаю проблему с вашим кодом: вы используете parser.add_argument(... nargs='+', ...) для обоих аргументов,Рассмотрим пример, который я привел ранее:

python manage.py update_mb 2 3 4

Как команда должна знать, какие event_id, а какие market_id?Как это работает для вас?

Одним из улучшений может быть использование необязательных аргументов;Узнайте больше о пользовательских командах управления Djangos и базовом Python argparse модуле .Это может выглядеть так:

def add_arguments(self , parser):
    parser.add_argument('--event', action='append', type=int)
    parser.add_argument('--market', action='append', type=int)

Для использования так:

>>> python manage.py update_mb --event 2 --event 3 --market 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...