【问题标题】:Django custom command object ID not found找不到 Django 自定义命令对象 ID
【发布时间】:2018-08-10 13:15:21
【问题描述】:

已解决:

try-catch 是在该过程的后续步骤中找到一些东西

我将这些步骤移到 try-catch 之外并解决了这些问题


我正在尝试构建一个可以针对单个模型对象运行的自定义 Django 命令

当我签入 shell 时,我看到对象很好

>>> 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?
  • 记录确切的异常。用你的except(永远不要那样做!),你模糊了实际发生的事情,只是假设可能是什么原因。

标签: python django django-models


【解决方案1】:

Id 应该是整数,而不是字符串。

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

默认情况下,ArgumentParser 对象将命令行参数读取为 简单的字符串。但是,命令行字符串通常应该 而是被解释为另一种类型,例如floatinttype add_argument() 的关键字参数允许任何必要的类型检查 以及要执行的类型转换。

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

【讨论】:

  • 在查询中使用1'1' 都没有关系。 Django 查询集在这种情况下是健壮的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多