كيف يمكن للمرء استخدام خيار أمر إدارة Django المخصص؟
-
25-09-2019 - |
سؤال
يخبرني مستند Django كيفية إضافة خيار إلى أمر إدارة Django المخصص الخاص بي ، عبر مثال:
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'),
)
ثم تتوقف المستندات. كيف يمكن للمرء أن يكتب handle
طريقة لهذه الفئة للتحقق مما إذا كان المستخدم قد قدم أ --delete
اختيار؟ في بعض الأحيان ، يجعل Django الأشياء السهلة :-(
المحلول
يمكنك أن تفعل ذلك مثل هذا:
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')
لاحظ أن بعض الكلمات الرئيسية في Python محفوظة حتى تتمكن من التعامل مع من يستخدمون **kwargs
. وإلا يمكنك استخدام الوسائط العادية (كما فعلت مع close
)
نصائح أخرى
اقتراح صغير حول تحديد الأوامر (الاسم الرئيسي ، dest
) والتعامل مع القيم الافتراضية (في make_option
وفي الأمر):
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)
في رمز Django ستجد "وسيطات الكلمات الرئيسية" (**kwargs
) في كثير من الأحيان باسم **options
, ، وهو أكثر توحيات (أنا متمسك بهذه الاتفاقية التسمية).
يمكن تحديد القيمة الافتراضية إما في Make_option ، أو من خلال dict.get
الطريقة التي تسمح بقيمة افتراضية.
لا يوجد سبب لا تستخدمه على حد سواء الافتراضات ، يجب أن Command.handle
تسمى الطريقة يدويًا ، حيث **options
يمكن أن يفتقد القاموس هذا الإدخال.