Python 将日期字符串传递给Django管理参数

Python 将日期字符串传递给Django管理参数,python,django,django-management-command,Python,Django,Django Management Command,我有一个Django管理命令,我这样传递: python manage.py tenant\u命令生成每周发票--开始日期2020-11-30 00:00:00--结束日期2020-12-06 23:59:00--模式=模式名称 这不起作用,我得到一个错误,说: 参数1必须是str,而不是None 我怀疑这与日期2020-11-30 00:00:00的实际字符串的格式化方式有关。我的管理命令代码如下 每周生成发票.py 谢谢你的帮助 ***编辑: 我应该解释一下,我用引号传递了字符串,但它仍然返

我有一个Django管理命令,我这样传递:

python manage.py tenant\u命令生成每周发票--开始日期2020-11-30 00:00:00--结束日期2020-12-06 23:59:00--模式=模式名称

这不起作用,我得到一个错误,说:

参数1必须是str,而不是None

我怀疑这与日期
2020-11-30 00:00:00
的实际字符串的格式化方式有关。我的管理命令代码如下

每周生成发票.py

谢谢你的帮助

***编辑:


我应该解释一下,我用引号传递了字符串,但它仍然返回相同的错误。

这是因为空格被视为参数分隔符。您可以将参数用单引号/双引号括起来,因此
--开始日期'2020-11-30 00:00:00'
而不是
--开始日期2020-12-06 23:59:00

此外,您还误解了参数的处理方式。这是没有双连字符的。因此,您可以使用
选项。get('start_date')
,但最好只使用参数的名称,并删除
nargs='+'
,因为这意味着可以传递多个
--start_date
等:

class Command(BaseCommand):
    help = 'Generates weekly invoice'

    def add_arguments(self, parser):
        parser.add_argument('--start_date')  # ← no nargs='+'
        parser.add_argument('--end_date')    # ← no nargs='+'
    
    def handle(self, start_date, end_date, **kwargs):
        start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S')
        end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d %H:%M:%S')
class命令(BaseCommand):
帮助='生成每周发票'
def add_参数(self,解析器):
parser.add_参数('--start_date')#←没有nargs='+'
parser.add_参数('--end_date')#←没有nargs='+'
def句柄(自身、开始日期、结束日期、**kwargs):
开始日期=datetime.datetime.strtime(开始日期,%Y-%m-%d%H:%m:%S)
end_date=datetime.datetime.strtime(end_date,“%Y-%m-%d%H:%m:%S”)

如果您想多次解析
--start\u date
,那么您可以使用
nargs='+'
,但是
start\u date
end\u date
将是字符串列表,而不是单个字符串,因此您需要执行映射。

这不起作用,我以前试过了谢谢,我稍微靠近了一点,但现在得到了这个错误:“handle()得到了一个意外的关键字参数'verbosity'@Rutnet:对不起,输入了一个错误,在最后,应该添加
verbosity
traceback
。现在我得到了这个错误,handle()得到了一个意外的关键字参数“settings”。看这个,它说传递的参数太多了。添加了kwargs,它可以工作
python manage.py tenant_command generate_weekly_invoice --start_date '2020-11-30 00:00:00' --end_date '2020-12-06 23:59:00' --schema=schema_name
#                                      pass the datetimes as a single parameter ↑                                ↑
python manage.py tenant_command generate_weekly_invoice --start_date '2020-11-30 00:00:00' --end_date '2020-12-06 23:59:00' --schema=schema_name
#                                      pass the datetimes as a single parameter ↑                                ↑
class Command(BaseCommand):
    help = 'Generates weekly invoice'

    def add_arguments(self, parser):
        parser.add_argument('--start_date')  # ← no nargs='+'
        parser.add_argument('--end_date')    # ← no nargs='+'
    
    def handle(self, start_date, end_date, **kwargs):
        start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S')
        end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d %H:%M:%S')