Id объекта пользовательской команды django не найден

РЕШЕНО:

Попытка заключалась в том, чтобы найти что-то на более позднем этапе процесса.

Я переместил эти шаги за пределы попытки - поймал и решил эти проблемы


Я пытаюсь создать собственную команду Django, которую можно запускать для отдельных объектов модели.

Когда я проверяю оболочку, я вижу, что объект в порядке

>>> Obj.objects.get(id=1)
<Obj: the object I'm looking for>

Однако моя настраиваемая команда выглядит следующим образом:

# app/management/update.py
class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument('--id')

    def handle(self, *args, **options):
        if options['id']:
            try:
                obj = Obj.objects.get(id=options['id'])
                # do things
            except:
                raise CommandError('no object with ID: "%s"' % options['id'])
        else:
            # do other things

Запустив это, я получаю сообщение об ошибке

>>> python manage.py update --id 1
CommandError: no object with ID: "1"

Любая помощь приветствуется.

Спасибо

Например, у вас есть ID=1, но в команде ID=2?

Rakesh 10.08.2018 15:18

Зарегистрируйте точное исключение. С вашим голым except (никогда не делайте этого!) Вы скрываете, что на самом деле происходит, и просто предполагаете, в чем может быть причина.

schwobaseggl 10.08.2018 15:50
2
2
135
1

Ответы 1

Id должен быть целым числом, а не строкой.

parser.add_argument('--id', type=int)

By default, ArgumentParser objects read command-line arguments in as simple strings. However, quite often the command-line string should instead be interpreted as another type, like a float or int. The type keyword argument of add_argument() allows any necessary type-checking and type conversions to be performed.

https://docs.python.org/3/library/argparse.html#type

В запросе не имеет значения, используете ли вы 1 или '1'. Таким образом, наборы запросов Django надежны.

schwobaseggl 10.08.2018 15:48

Другие вопросы по теме