Python 将日期字符串传递给Django管理参数
我有一个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 谢谢你的帮助 ***编辑: 我应该解释一下,我用引号传递了字符串,但它仍然返
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')