#33892 closed Bug (duplicate)
Management commands with flags using "store_false" create inverted boolean flags in call_command
Reported by: | Luke Wiwatowski | Owned by: | nobody |
---|---|---|---|
Component: | Core (Management commands) | Version: | 4.0 |
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 (last modified by )
In any management command which parses a flag using the action store_false
it has an unexpected side effect when calling the management command from the call_command
function. When call_command
parses the arg it won't be taken into account the action and can create weird inversions of the intent of the boolean. This is only relevant to options inputs via keyword arguments, string args work as excpected.
example:
from the command line this will work fine:
./manage.py flush --no-input
However if called from the call_command
with one of the recommended ways we might expect no_input=True
to work the same but it doesn't.
from django.core.management import call_command call_command("flush", no_input=True) You have requested a flush of the database. This will IRREVERSIBLY DESTROY all data currently in the ":memory:" database, and return each table to an empty state. Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: call_command("flush", no_input=False) # This will continue with no input required
I'm not sure how widespread this is but flush
is definitely affected
Change History (3)
comment:1 by , 2 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
comment:2 by , 2 years ago
Summary: | Management commands with flags using action="store_false" create possible inverted boolean flags in call_command → Management commands with flags using "store_false" create inverted boolean flags in call_command |
---|
comment:3 by , 2 years ago
Description: | modified (diff) |
---|
You should use
interactive
instead ofno_input
, see comment.Duplicate of #33430.