Джанго call_command () с подстановочным знаком имени файла - PullRequest
1 голос
/ 11 июня 2019

Как вы можете использовать подстановочные знаки имени файла в call_command()? Я пытаюсь создать команду управления, которая делает то же самое, что и python manage.py loaddata */fixtures/*.json

Ниже выдается код CommandError: No fixture named '*' found.

from django.core.management import call_command
from django.core.management.base import BaseCommand


class Command(BaseCommand):
    help = 'Load all fixtures in app directories'

    def handle(self, *args, **kwargs):
        call_command('loaddata', '*/fixtures/*.json')
        self.stdout.write('Fixtures loaded\n')

1 Ответ

1 голос
/ 11 июня 2019

Ввод glob в команде python manage.py loaddata */fixtures/*.json работает, потому что glob расширяется с помощью bash; если вы попытаетесь избежать шара, например, python manage.py loaddata '*/fixtures/*.json', команда должна завершиться с тем же сообщением об ошибке.

Вместо этого разверните глобусы на стороне Python, например:

import pathlib

class Command(BaseCommand):
    help = 'Load all fixtures in app directories'

    def handle(self, *args, **kwargs):
        cmd_args = list(pathlib.Path().glob('*/fixtures/*.json'))
        call_command('loaddata', *cmd_args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...