我正在尝试了解Django管理命令的工作方式。

当没有论据,或自我依靠时。我的命令工作正常。
当我向第二个函数'def add_arguments'添加参数时,似乎一个arg起作用了,但另一个没有注册。

我的命令如下:

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$

最佳答案

正如我在对问题的评论中所说的:

该命令需要一个(或多个)类型为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 custom management commands和基础Python argparse module的更多信息。
它可能看起来像这样:

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

07-25 23:50
查看更多