Frage

Die Doc Django sagen Sie mir, wie eine Option, um meinen django benutzerdefinierte Management-Befehl hinzufügen, über ein Beispiel:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--delete',
            action='store_true',
            dest='delete',
            default=False,
            help='Delete poll instead of closing it'),
    )

Dann einfach aufhören die Dokumentation. Wie würde man die handle Methode schreibt für diese Klasse zu überprüfen, ob der Benutzer eine --delete Option geliefert hat? Manchmal macht Django die einfachen Dinge schwierig: - (

War es hilfreich?

Lösung

Sie können es tun, wie folgt:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete poll'),
        make_option('--close',
            action='store_true',
            help='Close poll'),
    )

    def handle(self, close, *args, **kwargs):
        del_ = kwargs.get('del')

Zu beachten ist, dass einige Schlüsselwörter in Python reserviert sind, so dass Sie diejenigen mit **kwargs verarbeiten können. Ansonsten können Sie normale Argumente verwenden (wie ich mit close tat)

Andere Tipps

Ein kleiner Vorschlag über die Befehle definieren (Schlüsselname, dest) und Umgang mit Standardwerten (in make_option und im Befehl):

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete all polls.',
            dest='your_name_for_delete',
            default=False),
        make_option('--close',
            action='store_true',
            help='Close all polls.'),
    )

    def handle(self, close, *args, **options):
        if options.get('your_name_for_delete'):
            Poll.objects.delete()
        if options.get('close', False):
            Poll.objects.update(closed=True)

In Django Code Sie "Keyword-Argumente" finden (**kwargs) oft als **options genannt, die mehr suggestiv ist (I dieser Namenskonvention halten).

Der Standardwert kann entweder in make_option angegeben werden, oder durch die dict.get Verfahren, die ermöglicht einen Standardwert.

Es gibt keinen Grund, nicht u verwenden beide Standardwerte, sollten Sie Ihre Command.handle Methode manuell aufgerufen werden, in dem die **options Wörterbuch diesen Eintrag fehlt könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top