Django 使用 ORM 获取特定元素的范围
Django use ORM to get range of a particular element
我有一个名为 MyModel 的模型,它有一些虚拟数据如下:
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
我想以这样一种方式查询此模型,即我得到的输出为我提供连续项目的范围,如下所示:
[{'item': 'ab', 'values': '1-3'},
{'item': 'abc', 'values': '4-6'},
{'item': 'ab', 'values': '7-10'},
{'item': 'abc', 'values': '11-13'}]
我如何使用 django ORM 执行此操作?
很确定你不能用 ORM 做到这一点......你需要编写自己的 python 代码来做到这一点。
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])
编辑:
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
我有一个名为 MyModel 的模型,它有一些虚拟数据如下:
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
我想以这样一种方式查询此模型,即我得到的输出为我提供连续项目的范围,如下所示:
[{'item': 'ab', 'values': '1-3'},
{'item': 'abc', 'values': '4-6'},
{'item': 'ab', 'values': '7-10'},
{'item': 'abc', 'values': '11-13'}]
我如何使用 django ORM 执行此操作?
很确定你不能用 ORM 做到这一点......你需要编写自己的 python 代码来做到这一点。
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])
编辑:
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