Writing a custom management command with args and options - explanation of fields needed

后端 未结 2 590
暗喜
暗喜 2021-02-06 23:26

In my django app I am writing a custom management command which will create an instance of an object based on the args passed and have the option of saving it to the database ba

2条回答
  •  情话喂你
    2021-02-07 00:02

    Explanation of make_option from the docs http://docs.python.org/2/library/optparse.html#populating-the-parser

    make_option() is a factory function for creating Option instances; currently it is an alias for the Option constructor. A future version of optparse may split Option into several classes, and make_option() will pick the right class to instantiate. Do not instantiate Option directly.

    These are all of the possible option attributes:

    http://docs.python.org/2/library/optparse.html#option-attributes

    Common Use in a django management command:

    class Command(BaseCommand):
        help = "Command to import a list of X"
        option_list = BaseCommand.option_list + (
            make_option(
                "-f", 
                "--file", 
                dest = "filename",
                help = "specify import file", 
                metavar = "FILE"
            ),
        )
    
        option_list = option_list + (
            make_option(
                "-s", 
                "--slug", 
                dest = "category",
                help = "category slug", 
                metavar = "SLUG"
            ),
        )
    
        def handle(self, *args, **options):
                # make sure file option is present
                if options['filename'] == None :
                    raise CommandError("Option `--file=...` must be specified.")
            
                # make sure file path resolves
                if not os.path.isfile(options['filename']) :
                    raise CommandError("File does not exist at the specified path.")
        
                # make sure form option is present
                if options['category'] == None :
                    raise CommandError("Option `--slug=...` must be specified.")
    

提交回复
热议问题