Вам нужно написать скрипт, который запускается в контексте Django, вызывается через manage.py
. Это довольно просто.
В вашем приложении сначала создайте app/management/commands/__init__.py
(пустой файл, вам может потребоваться создать папки). Затем начните с копирования этого шаблона в app/management/commands/noop.py
:
# invoke with ./manage.py noop [--total] 1 2 3 ...
# script in app/management/noop.py with __init__.py
from django.core.management.base import BaseCommand
class Command( BaseCommand):
def add_arguments( self, parser): # parser is Python argparse parser
parser.add_argument( 'number_list', nargs='+', type=int,
help='any number of integers to add up',
)
parser.add_argument( '--total', action='store_true', default=False,
help='Print the total as well as the args'
)
parser.add_argument( '--file', type=self.infile)
def handle( self, *args, **options ):
# print( f'Args: {args}' ) # what are args?
if options['verbosity'] >= 2: # inherit default options, including verbosity and help.
# use --help to explore the others
print( f'Options: {options}' )
if options['total']:
total = sum( options['number_list'])
print( f'Total: {total}' )
if options['file']:
print('First line is:')
print( options['file'].readline() )
def infile( self, arg):
return open( arg, 'r')
Если вы не знакомы с argparse, обратитесь к его документации (это стандартный Python, а не Django): https://docs.python.org/3/library/argparse.html
Как только вы установили, что это работает, и вы можете получить шесть с
./manage.py noop --total 1 2 3
скопируйте его в качестве отправной точки к какому-либо другому имени в той же папке и измените его для выполнения любых операций, которые вы хотите выполнить из командной строки. Вы начнете с добавления
from listings.models import Whatever, ...
, а затем измените метод handle, чтобы он делал с ними все, что вы хотите, в соответствии с указанными вами параметрами.
Django doc: https://docs.djangoproject.com/en/2.1/howto/custom-management-commands/