作者:mobiledu2502854877 | 来源:互联网 | 2023-09-17 17:00
这个想法是通过接受命令行选项来删除对象:
预期的行为,使用以下命令进行新的自定义命令调用:
python manage.py delete_obj --delete id 1234
或
python manage.py delete_obj --delete from 2019/10/01 to 2019/12/12
第一部分的代码:
from django.core.management.base import BaseCommand
from ...models import SomeObject
class Command(BaseCommand):
def add_arguments(self,parser):
parser.add_argument('id',type=int)
parser.add_argument(
'--delete',default = False,help='Delete product',)
def handle(self,*args,**options):
if options['delete']:
if options['id']:
SomeObject.delete()
我在add_arguments()方法中为ID添加自定义选项,如何定义可以通过ID或DATE RANGE删除的对象
这样的事情,
class Command(BaseCommand):
def add_arguments(self,parser):
parser.add_argument('--id',type=int)
parser.add_argument('--date_from')
parser.add_argument('--date_to')
def handle(self,*args,**options):
if options['id']:
try:
instance = SampleModel.objects.get(id=options['id'])
instance.delete()
self.stdout.write(self.style.SUCCESS('Object Deleted'))
except SampleModel.DoesNotExist:
self.stdout.write(self.style.ERROR('Object not found'))
elif options['date_from'] and options['date_to']:
date_range = [options['date_from'],options['date_to']]
SampleModel.objects.filter(datetime_field__range=date_range).delete()
self.stdout.write(self.style.SUCCESS('Objects Deleted'))
else:
self.stdout.write(self.style.ERROR('options are not given'))
用法:
python manage.py command_name --id 123
python manage.py command_name --date_from 2012-12-12 --date_to 2013-12-12
基本思想是,您可以将 任意数量的参数传递给Django命令 ,并且Django可以 将输入值强制转换为任何本地python数据类型