Django personnalisé de gestion des commandes: AttributeError: 'module' objet n'a pas d'attribut "Commande"
Je suis en train de faire une gestion personnalisée de la commande comme indiqué dans la doc ici: https://docs.djangoproject.com/en/dev/howto/custom-management-commands/
Lorsque j'essaie d'exécuter la commande de mon répertoire de projet je rencontre l'erreur suivante:
AttributeError: 'module' object has no attribute 'Command'
Voici le fichier:
#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.')
La commande, je suis en cours d'exécution est :
$ python manage.py event_expiration
J'ai fait sûr que je suis l'ajout de l'event_expiration.py fichier dans la gestion et commandes des dossiers et que ces dossiers ont fichiers d'initialisation. ceux qui sont dans un de mes dossiers app.
Suis-je surplombant quelque chose ici? Toute aide est appréciée, merci!
EDIT:
Compagnons de SORTE que l'utilisateur Yuji m'a aidé à essayer de déboguer ce un peu, mais nous sommes toujours sans réponse. heres ce que nous avons fait:
Tout d'abord, le plein de sperme et de commande:
(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'
Pour voir ce qui se passait à django/core/gestion/init.py", la ligne 70, j'ai placé l'importation apb; apb.set_trace() dans le fichier.
En mode débogage, nous avons essayé:
module.__file__
pour vérifier si le module est là où l'on attend, et c'était en effet, avec une puissance de:
'/home/matt/Dropbox/PROD/ersvp.it/app/management/commands/event_expiration.pyc'
Ensuite, nous avons essayé importation manuelle de Commande dans le 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
Encore à me gratter la tête!
mVChr: oui, c'est
Vous devriez poster le débogage nous l'avons fait: c'est un gros indice quelles erreurs vous avez essayé d'importer la Commande du shell
voir edit 🙂
OriginalL'auteur darko | 2012-08-10
Vous devez vous connecter pour publier un commentaire.
Qu'est-ce que la structure de votre fichier? Il devrait être comme ceci:
Si la structure est comme ci-dessus, essayez les solutions suivantes:
J'ai listé les pur de sortie de l'exécution de
dir
sur une commande de la gestion de mon propre. Faites un essai, et de faire rapport de ce qui est disponible pour le module. Vous pourriez trouver vous-même avoir une erreur à ce stade, qui peut aider à diagnostiquer. Je suis soupçonnant un problème avec l'importation de django lui-même. J'imagine que l'python manage.py shell
échouera, ce qui signifie qu'il n'est pas un problème avec votre commande, mais un problème avec le projet.Edit 2:
Le fait que
check_expiration
était visible dans votredir
de sortie prend en charge ma théorie que la structure de dossier est mal quelconque. À moins qu'il y a en particulier une fonction nommée que dans votre module.Procédez de la façon suivante et de montrer la sortie:
Aussi, afficher la totalité du contenu de votre
event_expiration.py
fichier, et le contenu de votremanagement/commands/__init__.py
fichier. Méfiez-vous des espaces mixtes avec des onglets comme des espaces aussi.Les commandes ci-dessus exécution fine Josh, le résultat est comme suit: ['Événement', 'les builtins', 'doc', 'fichier', 'nom', 'paquet', 'check_expiration', 'datetime']
semble comme une chose bizarre à être disponible.. Où est la regarder? Il y a quelque chose de mal avec votre structure de dossier, ou de la structure de dossier selon python. Est quelque chose de défini dans votre
__init__
fichiers qui pourraient être affections?Geeze, s'avère, j'ai eu deux différents event_expiration.py fichiers et a été l'édition de celui qui se trouve dans mon répertoire de projet principal. :X Merci pour l'aide, j'ai besoin d'être plus prudent!
heureux que vous avez compris! Je trouve ça drôle que vous êtes allé à la longueur de l'aide de l'apb, et le problème réel est beaucoup plus simple. N'est-ce pas notre travail, drôle parfois 😛
OriginalL'auteur Josh Smeaton
J'ai rencontré le même problème et le problème était que ma classe de commande ne s'appelait pas exactement
Command
, comme les docs dit. Exemple:Cela a réglé le problème, mais où veut-il dire que dans les docs? Je ne le trouve pas ici.
it must define a class Command that extends BaseCommand or one of its subclasses
OriginalL'auteur Caumons