The previous post_migrate signal, when combined with -`-noinput`, did not
delete content types due to data loss concerns. However, now that
`remove_stale_contenttypes` is a standalone management command, I think
the data ramifications are much more clear and less likely to cause
unwanted data loss.
I suggest one the following:
- (My preferred) Change `remove_stale_contenttypes --noinput` to remove
stale content types instead of doing nothing. I think this is a more
intuitive behavior given the arguments. The combination of arguments would
stop being a noop and provide useful behavior to projects managing a large
number of Django sites. However, I recognize this has some backwards
compatibility concerns. The argument would change from doing nothing to
deleting database records.
- Add a new argument `--force` that would assume the answer "yes" for all
prompts. I think this is less optimal as it introduces an argument that
doesn't need to exist if we could modify the behavior of `--noinput`.
If the backward compatibility concerns are too much, perhaps it could be
introduced in stages:
Next release:
- Issue a deprecation warning when using `remove_stale_contenttypes
--noinput`, state that it will delete content types in a future version.
- Add `--force` arguments so project admins can delete stale content types
in a non-interactive fashion.
After a deprecation period:
- Change `remove_stale_contenttypes --noinput` to delete content types.
- Deprecate, and eventually remove, `--force`.
Prior tickets to consider:
- #24865 -- Add a management command to remove stale content types
- #25036 -- `manage.py migrate --noinput` does not delete stale content
types (refers to old post_migrate signal)
Code of `remove_stale_contenttypes` showing that it is a noop:
--
Ticket URL: <https://code.djangoproject.com/ticket/29556>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* has_patch: 0 => 1
Comment:
[https://github.com/django/django/pull/10163 PR for the first option
above]
--
Ticket URL: <https://code.djangoproject.com/ticket/29556#comment:1>
* stage: Unreviewed => Ready for checkin
* type: New feature => Bug
--
Ticket URL: <https://code.djangoproject.com/ticket/29556#comment:2>
* status: new => closed
* resolution: => fixed
Comment:
In [changeset:"08ebed5e7975b2b735ab8ec0384ccb8e31b76056" 08ebed5e]:
{{{
#!CommitTicketReference repository=""
revision="08ebed5e7975b2b735ab8ec0384ccb8e31b76056"
Fixed #29556 -- Made 'remove_stale_contenttypes --noinput' delete content
types.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/29556#comment:3>