首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django使用ORM获取特定元素的范围

Django使用ORM获取特定元素的范围
EN

Stack Overflow用户
提问于 2015-03-26 16:22:22
回答 1查看 61关注 0票数 0

我有一个名为MyModel的模型,它有一些虚拟数据如下所示:

代码语言:javascript
运行
复制
     item    date     value
------------------------------
      ab    8/10/12     1
      ab    7/10/12     2
      ab    6/10/12     3
      abc   8/10/12     4
      abc   7/10/12     5
      abc   7/10/12     6
      ab    7/10/12     7
      ab    7/10/12     8
      ab    7/10/12     9
      ab    7/10/12     10
      abc   7/10/12     11
      abc   7/10/12     12
      abc   7/10/12     13

我想以这样的方式来查询这个模型,这样我就可以得到一个输出,给出序列中的项的范围,如下所示:

代码语言:javascript
运行
复制
[{'item': 'ab', 'values': '1-3'},
 {'item': 'abc', 'values': '4-6'},
 {'item': 'ab', 'values': '7-10'},
 {'item': 'abc', 'values': '11-13'}]

我如何能够使用django ORM来完成这个任务呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 17:07:52

非常肯定的是,您不能用ORM实现这一点.您需要编写自己的python代码才能做到这一点。

代码语言:javascript
运行
复制
counts = []

for model in MyModel.objects.all().order_by('value'):
  if not counts or last_item != model.item:
    counts.append({'item': model.item, 'values': [ model.value ]})
    last_item = model.item
  elsif model.item == last_item:
    counts[-1]['values'].append(model.value)

for count in counts:
  count['values'] = '%s-%s' % (count['values'][0], count['values'][-1])

编辑:

代码语言:javascript
运行
复制
counts = []

for model in MyModel.objects.all().order_by('value'):
  if not counts or last_item != model.item:
    counts.append({'item': model.item, 'first': model.value, 'last':model.value})
    last_item = model.item
  elsif model.item == last_item:
    counts[-1][last] = model.value
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29283725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档