Django custom management commands: AttributeError: 'module' object has no attribute 'Command'
django
Solution
What is your file structure like? It should be like so:
app/
__init__.py
management/
__init__.py
commands/
__init__.py
event_expiration.py
If the structure is as above, try the following:
python manage.py shell
>>> from app.management.commands import event_expiration
>>> dir(event_expiration)
['Account', 'BaseCommand', 'Callback', 'Command', 'CommandError', 'Comment', 'Status', 'User', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'clean_phone_number', 'csv', 'models', 'os', 're']
I've listed the pure output of running `dir` on a management command of my own. Give that a try, and report back what is available to the module. You might find yourself getting an error at this point, which may help diagnose. I'm suspecting a problem with importing django itself. I'm guessing the `python manage.py shell` will fail, which will mean it's not a problem with your command, but a problem with the project.
Edit 2:
The fact that `check_expiration` was visible in your `dir` output supports my theory that the folder structure is amiss in someway. Unless there's specifically a function named that within your module.
Please do the following and show the output:
cd /path/to/app/
find .
Also, show the entire contents of your `event_expiration.py` file, and the contents of your `management/commands/__init__.py` file. Be wary of spaces mixed with tabs as whitespace also.
Problem
I am trying to make a custom management command as show in the docs here: https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ When I try to run the command from my project directory I am experiencing the following error: ``` AttributeError: 'module' object has no attribute 'Command' ``` Here is the file: ``` #event_expiration.py from django.core.management.base import BaseCommand, CommandError from app.models import Event import datetime class Command(BaseCommand): help = 'deletes expired events' def handle(self, *args, **options): today = datetime.datetime.now() events = Event.objects.filter(date=datetime.date(2011,11,11)) for e in events: e.delete() self.stdout.write('Expired events successfully deleted.') ``` The command I am running is : ``` $ python manage.py event_expiration ``` I've made sure I am adding the event_expiration.py file within management and commands folders and that those folders have init files. those are in one of my app folders. Am I overlooking something here? Any help is appreciated, thanks! EDIT: Fellow SO user Yuji helped me attempt to debug this a bit but we are still stumped. heres what we did: First, the full traceback and command: ``` (venv)matt@inspirion14z:~/Dropbox/PROD/ersvp.it$ python manage.py event_expiration Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/matt/Dropbox/PROD/ersvp.it/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line utility.execute() File "/home/matt/Dropbox/PROD/ersvp.it/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/matt/Dropbox/PROD/ersvp.it/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 261, in fetch_command klass = load_command_class(app_name, subcommand) File "/home/matt/Dropbox/PROD/ersvp.it/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 70, in load_command_class return module.Command() AttributeError: 'module' object has no attribute 'Command' ``` To see what was going on at django/core/management/init.py", line 70 I placed import pdb; pdb.set_trace() within the file. While in debug mode we tried: ``` module.__file__ ``` to check if the module was where expected, and it indeed was, with an output of: ``` '/home/matt/Dropbox/PROD/ersvp.it/app/management/commands/event_expiration.pyc' ``` Next, we tried manually importing Command in the shell: ``` >>> from app.management.commands.event_expiration import Command Traceback (most recent call last): File "<console>", line 1, in <module> ImportError: cannot import name Command ``` Still scratching my head!