Opened 9 years ago
Closed 9 years ago
#27799 closed Bug (wontfix)
If 'args' is used on a custom LabelCommand or AppCommand subclass, only the last positional arg is supplied to the command
| Reported by: | Matthew Somerville | Owned by: | nobody |
|---|---|---|---|
| Component: | Core (Management commands) | Version: | 1.8 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
argparse has undefined behaviour if add_argument is called twice with the same name – Django does this for LabelCommand and AppCommand when self.args is used, the first call to parser.add_argument('args') in BaseCommand, the second in LabelCommand/AppCommand.
What appears to happen is you get only the last positional argument supplied to your command; if the '*' and the '+' had been the other way round, you would get nothing.
Change History (2)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
| Component: | Uncategorized → Core (Management commands) |
|---|---|
| Resolution: | → wontfix |
| Status: | new → closed |
As discussed in #django-dev, the correct solution for your use case seems to be to use the LabelCommand.label attribute rather than args. This is fixed in 1.10 with the removal of the args attribute.
Nearly 2 years after the release of 1.8 and with 1 year of support left, I don't think it's critical to change in 1.8 at this point.
Pull request at https://github.com/django/django/pull/8002