diff --git a/django/contrib/contenttypes/management.py b/django/contrib/contenttypes/management.py
index f705330..b2d6b55 100644
|
a
|
b
|
def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT
|
| 61 | 61 | # Confirm that the content type is stale before deletion. |
| 62 | 62 | if to_remove: |
| 63 | 63 | if interactive: |
| 64 | | content_type_display = '\n'.join( |
| 65 | | ' %s | %s' % (ct.app_label, ct.model) |
| 66 | | for ct in to_remove |
| 67 | | ) |
| | 64 | ct_info = [] |
| | 65 | for ct in to_remove: |
| | 66 | relations = ct._meta.get_all_related_objects() |
| | 67 | related_counts = {} |
| | 68 | |
| | 69 | ct_info.append(' %s | %s' % (ct.app_label, ct.model)) |
| | 70 | |
| | 71 | for rel in relations: |
| | 72 | # Ignore non-ContentType relations |
| | 73 | if rel.parent_model != ContentType: |
| | 74 | continue |
| | 75 | |
| | 76 | accessor = getattr(ct, rel.get_accessor_name(), None) |
| | 77 | |
| | 78 | if not accessor: |
| | 79 | continue |
| | 80 | |
| | 81 | filter_kwargs = { |
| | 82 | rel.field.name: ct |
| | 83 | } |
| | 84 | related_count = accessor.filter(**filter_kwargs).count() |
| | 85 | if related_count > 0: |
| | 86 | ct_info.append(' - %s | %s object%s to be deleted: %d' % ( |
| | 87 | rel.opts.app_label, |
| | 88 | rel.opts.model_name, |
| | 89 | 's' if related_count != 1 else '', |
| | 90 | related_count) |
| | 91 | ) |
| | 92 | |
| | 93 | content_type_display = '\n'.join(ct_info) |
| 68 | 94 | ok_to_delete = input("""The following content types are stale and need to be deleted: |
| 69 | 95 | |
| 70 | 96 | %s |