首页 文章

django-admin自定义命令中的两个参数

提问于
浏览
8

我有一个 working django-admin自定义命令,用于使用新信息填充我的数据库 . 一切都行得通 .

但是,我现在已经稍微更改了我的模型和函数以接受两个参数作为元组 - 名字 and 姓氏,而不仅仅是"name" .

以下代码 - 工作 . 使用“manage.py xyz name1 name2 name3 ...等运行(不同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)

Is it possible to pass on two arguments from the django-admin custom command where the second argument is optional --> i.e. (first, last=None)?

伪代码低于我想要运行的...“manage.py xyz(first1,last1)(first2,last2)< - 或者这个的一些变化

我已经更改了DEF函数以适当地接受它作为一个独立的函数 . 我只是不确定如何才能让django-admin命令正常工作 .

1 回答

  • 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
    

相关问题