【问题标题】:how to get a value out of ValuesQuerySet如何从 ValuesQuerySet 中获取值
【发布时间】:2013-06-16 03:47:05
【问题描述】:

我正在尝试使用以下代码行从我的 Django 应用程序中的数据库中提取一些数据。 Job 是我的模型的名称,jobIDs[i] 表示正在操作的记录的 id。

timeToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[0]

当我到达 ['whenToRun'] 时,我得到一个 TypeError()。我是否误解了如何在这种 dict 中访问值?

编辑:澄清一下,.values() 返回一个 ValuesQuerySet

【问题讨论】:

  • 也许你把filter拼错了get,第二个返回一个模型,第一个返回valueQuerySet。
  • filter 应该只返回一个模型,values() 是我尝试从记录的各个列中提取值(特别是 whenToRun)。还有另一种方法可以做到这一点吗?我一遍又一遍地检查了这段代码,我不相信有任何拼写错误。
  • get 是只获得 ONE 模型的方式,那么,您不需要将 [0] 附加为 @karthikr 目的。

标签: python django dictionary typeerror


【解决方案1】:

这可能就是你要找的东西:

timeToRun = Job.objects.filter(id=jobIDs[i]).values()[0]['whenToRun'].split(' ')[0]

documentation values() 是一个ValueQuerySet(查询集对象列表)

现在,如果Job.objects.filter(id=jobIDs[i]) 返回空查询集,它会抛出错误,所以我会这样做:

if Job.objects.filter(id=jobIDs[i]).exists(): #a quick lookup
    timeToRun = Job.objects.filter(id=jobIDs[i]).values()[0]['whenToRun'].split(' ')[0]

多一层优化:

if Job.objects.filter(id=jobIDs[i]).exists(): #a quick lookup
    timeToRun = list(Job.objects.filter(id=jobIDs[i]).values_list('whenToRun', flat=True))[0].split(' ')[0]

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2020-05-22
    • 2018-03-30
    • 2016-08-27
    • 2017-02-16
    • 2013-08-03
    • 2021-07-22
    • 2012-07-24
    • 2013-12-03
    相关资源
    最近更新 更多