1
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
    def handle(self, *args, **options):
        ......
        self.handle_noargs()

    def handle_noargs(self, **options):
        packages_count = Package.objects.all().count()
        Package.objects.all().delete()
        print >> self.stdout, u'Deleted %d packages' % packages_count
        ......

提供されたコードのテストを作成していますが、handle_noargs 関数を呼び出すたびに次のエラーが発生します。

AttributeError: 'Command' object has no attribute 'stdout'

Django 1.3.1 を使用しています。

>>> import django
>>> django.VERSION
(1, 3, 1, 'final', 0)

グーグルの回答 stdout については、いくつかのバージョン前に BaseCommand クラスに実装されていたため、django がそれを見つけられない理由がわかりません。

dir(self) の追加:

>>> from webui.packagedb.management.commands.packagedb_clear import Command
>>> dir(Command)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribut
e__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_e
x__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_
_weakref__', 'args', 'can_import_settings', 'create_parser', 'execute', 'get_ver
sion', 'handle', 'handle_noargs', 'help', 'option_list', 'output_transaction', '
print_help', 'requires_model_validation', 'run_from_argv', 'usage', 'validate']
4

1 に答える 1

2

handle_noargs を直接呼び出すことはできないと思います。BaseCommand クラス コマンドには、handle() を呼び出す execute() メソッドがあり、stdout と stderr を初期化する前に

したがって、コマンドを実行するたびに、 handle メソッドが実装されることを期待する execute() メソッドが呼び出されます

于 2012-12-18T12:31:32.383 に答える