list_signals Command Fails with AttributeError When Key is Not a Model Instance

Author: Hesham-elhattabCreated Nov 20, 2024Updated Aug 19, 2026

Bug Report: Error in list_signals Command

Versions

  • django-extensions: 3.1.3
  • Django: 3.2.16

Command

bash
python manage.py list_signals

Error Traceback

Traceback (most recent call last): File "/var/www/manage.py", line 26, in execute_from_command_line(sys.argv) File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 419, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.9/site-packages/django_extensions/management/commands/list_signals.py", line 65, in handle verbose_name = force_str(key._meta.verbose_name) AttributeError: 'str' object has no attribute '_meta'

Explanation and Findings

Upon reviewing the code, the issue seems to stem from the following line in the list_signals command:

https://github.com/django-extensions/django-extensions/blob/main/django_extensions/management/commands/list_signals.py#L54

The problematic line attempts to access the _meta attribute of key, assuming it to be a model instance. However, when the key does not correspond to a model, the fallback value "unknown" (a string) is added to the models dictionary. This leads to the AttributeError because strings do not have a _meta attribute.

Proposed Fix

Instead of adding "unknown" to the models dictionary, the fallback value should be None. This way, unknown keys won't be treated as valid models, avoiding errors downstream.

Steps to Reproduce

Install django-extensions version 3.1.3 with Django 3.2.16.

  1. Install django-extensions version 3.1.3 with Django 3.2.16.
  2. Run the command:
bash
python manage.py list_signals
  1. Observe the traceback.

Expected Behavior

The command should handle cases where key is not a model instance gracefully without raising an exception.

Suggested Change

Modify the fallback behavior in the list_signals command to prevent invalid entries in the models dictionary. Specifically:

  • Replace "unknown" with None or exclude the invalid key from being added.

Let me know if additional information is required!

Source: django-extensions/django-extensions