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

后端 未结 2 592
暗喜
暗喜 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-06 23:53

    The optparse docs might be a little bit more helpful. You are basically telling the management function what each option you require should do.

    The action keyword is the most telling and it configures what you want to do with that option - is it just a flag to do something special (a callback, i.e. '--enable-feature') or should it accept a parameter for example (store, i.e. '-things 10').

    With that in mind, the rest of the options make a bit more sense with that all in mind. Read through 'option attributes' to get an explanation of what you've listed, and then 'actions' to see what I've mentioned above

    0 讨论(0)
  • 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.")
    
    0 讨论(0)
提交回复
热议问题