我有一个工作 django-admin自定义命令,用于使用新信息填充数据库。一切都行之有效。
但是,我现在已经稍微改变了我的模型和功能,接受了两个参数作为元组 - 名字和姓氏,而不仅仅是“名字”。
以下代码 - 工作。使用“manage.py xyz name1 name2 name3 ... etc.(不同args之间的空格)
运行from django.core.management.base import BaseCommand, CommandError
from detail.models import ABC
from detail.parser import DEF
class Command(BaseCommand):
args = '<name...>'
help = 'Populates the ABC class database'
def handle(self, *args, **options):
for symbol in args:
try:
info = DEF(name)
是否可以从django-admin自定义命令传递两个参数,其中第二个参数是可选的 - &gt;即(首先,最后=无)?
下面我想运行的伪代码...“manage.py xyz(first1,last1)(first2,last2)&lt; - 或者这个的一些变体
我已经将DEF函数更改为适当接受它作为独立函数。我只是不确定如何才能让django-admin命令正常工作。
答案 0 :(得分:13)
尽管django.core.management
没有提供特定的工具,但这完全有可能。您可以解析通过args
关键字参数传递的参数。你必须提出这样做的语法(在命令的help
属性中定义语法可能是个好主意。)
假设语法为firstname.lastname
,或者在省略姓氏的情况下仅为firstname
,您可以执行以下操作:
def handle(self, *args, **options):
for arg in args:
try:
first_name, last_name = arg.split('.')
except ValueError:
first_name, last_name = arg, None
info = DEF(first_name, last_name)
该命令的用户可以传递如下参数:
$ python manage.py yourcommand -v=3 john.doe bill patrick.bateman